0

既存の 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
...
4

1 に答える 1