0

我们想介绍 Meson 来构建我们现有的 C++ 应用程序。我们的结构如下:

  • Wie 有 8 个主要模块 (mod_X)
  • 每个模块有 20-40 个子目录,每个子目录有 5-100 个 cpp 文件;在库和可执行文件中分开。
  • mod_INFRA/apps/myparser有一个创建代码生成器可执行文件的目标
    • 这仅取决于mod_INFRA/libs/A
  • 代码生成器必须应用于所有模块和子目录中众多子目录中的某些文件 (*.rules),包括 mod_INFRA 本身。
  • 生成的源代码必须与目标一起编译和考虑subdir_X

我想达到的目标:

  • root/meson.build定义一个通用且可重用的,custom_target或者我可以根据需要在generator每个模块和子目录中调用/应用。

问题:

  • root/meson.build中,我们定义了编译器标志等公共变量,我们subdir(‘mod_INFRA’)为每个模块做。在mod_INFRA/meson.buildsubdir(‘apps/xyz’), subdir(‘libs/abc’), 为每个子目录做等。没关系
  • 但是我很难定义custom_target or generatorin root/meson.build。之前还没有所需的可执行文件subdir('mod_INFRA')subdir(..)为时已晚,因为我已经需要生成器在mod_INFRA.

一个可能的解决方案可能是通过目标名称延迟解析可执行文件的“代理”。例如,如果我能做到(伪代码)generator(getTargetOutput(‘myparser’), …):. 但我不知道这是否可用。

在不完全重构目录结构的情况下如何解决它的任何其他想法?

- 介子.build
- mod_INFRA
  - 介子.build
  - 应用
    - 介子.build
    - 我的解析器
      - 介子.build
  - 库
    - subdir_INFRA_A(构建 myparser 所需)
      - 介子.build
    - subdir_INFRA_B
      - 介子.build
    - subdir_INFRA_C(需要解析器生成代码)
      - 介子.build
- mod_A
  - 介子.build
  - subdir_A_A(需要解析器生成代码)
    - 介子.build
  - subdir_A_B(需要解析器生成代码)
    - 介子.build
- mod_B
...
4

1 回答 1

0

有人建议:你可以从顶层直接进入“mod_INFRA/libs/subdir_INFRA_A”和“apps/myparser”目录来构建它们,然后再返回顶层,然后重复向下一层?做到了这一点,

于 2019-10-11T15:11:00.150 回答