既存の C++ アプリケーションを構築するための Meson を紹介したいと思います。私たちの構造は次のとおりです。
- Wie には 8 つのメイン モジュール (mod_X) があります。
- 各モジュールには 20 ~ 40 個のサブディレクトリがあり、それぞれに 5 ~ 100 個の cpp ファイルがあります。ライブラリと実行可能ファイルに分かれています。
mod_INFRA/apps/myparser
コード ジェネレーターの実行可能ファイルを作成するターゲットがある- のみに依存するもの
mod_INFRA/libs/A
- のみに依存するもの
- コード ジェネレーターは、mod_INFRA 自体を含む、すべてのモジュールおよびサブディレクトリ内の多数のサブディレクトリ内の特定のファイル (*.rules) に適用する必要があります。
- 生成されたソース コードをコンパイルし、ターゲットを考慮して
subdir_X
私が達成したいこと:
root/meson.build
共通で再利用可能なもの、または必要に応じてすべてのモジュールとサブディレクトリで呼び出し/適用できるものを定義しcustom_target
ますgenerator
。
問題:
- では
root/meson.build
、コンパイラ フラグなどの共通変数を定義し、subdir(‘mod_INFRA’)
モジュールごとに定義します。mod_INFRA/meson.build
私はサブsubdir(‘apps/xyz’), subdir(‘libs/abc’),
ディレクトリごとになどを行います。それは大丈夫です custom_target or generator
ただし、 inを定義するのに苦労していますroot/meson.build
。必要な実行可能ファイルは、以前はまだ利用できませんsubdir('mod_INFRA')
。そして、subdir(..)
手遅れになった後は、ジェネレーターが既に他のサブディレクトリにファイルをビルドする必要があるためですmod_INFRA
。
可能な解決策は、実行可能ファイルをターゲット名で遅延解決する「プロキシ」である可能性があります。たとえば、できる場合 (疑似コード): generator(getTargetOutput(‘myparser’), …)
. しかし、それが利用可能かどうかはわかりませんでした。
ディレクトリ構造を完全に再構築せずに、それを解決する方法について他に何か考えはありますか?
- meson.build - mod_INFRA - meson.build - アプリ - meson.build - マイパーサー - meson.build - ライブラリ - subdir_INFRA_A (myparser のビルドに必要) - meson.build - subdir_INFRA_B - meson.build - subdir_INFRA_C (コードを生成するにはパーサーが必要) - meson.build - mod_A - meson.build - subdir_A_A (コードを生成するにはパーサーが必要) - meson.build - subdir_A_B (コードを生成するにはパーサーが必要) - meson.build - mod_B ...