我们想介绍Meson来构建我们现有的C++应用程序。我们的结构如下:
- 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’),
等。没关系 - 但是,我很难在
root/meson.build
中定义custom_target or generator
。在subdir('mod_INFRA')
之前,所需的可执行文件尚不可用。subdir(..)
之后为时已晚,因为我已经需要生成器来构建mod_INFRA
中的其他子目录中的文件。
一种可能的解决方案可能是按目标名称延迟解析可执行文件的"代理"。 例如,如果我能做到(伪代码(:generator(getTargetOutput(‘myparser’), …)
.但我无法发现这是否可用。
关于如何在不完全重组目录结构的情况下解决它的任何其他想法?
- 介子构建 - mod_INFRA - 介子构建 -应用程序 - 介子构建 - Myparser - 介子构建 - 库 - subdir_INFRA_A(构建 myparser 需要( - 介子构建 - subdir_INFRA_B - 介子构建 - subdir_INFRA_C(需要解析器来生成代码( - 介子构建 - mod_A - 介子构建 - subdir_A_A(需要解析器来生成代码( - 介子构建 - subdir_A_B(需要解析器来生成代码( - 介子构建 - mod_B ...
有人建议:从顶层,你能在回到顶层之前,直接进入"mod_INFRA/libs/subdir_INFRA_A"和"apps/myparser"目录来构建它们吗? 那起到了作用,