我们想介绍 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.build
我subdir(‘apps/xyz’), subdir(‘libs/abc’),
为每个子目录做等。没关系 - 但是我很难定义
custom_target or generator
inroot/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 ...