我的C应用程序可以使用不同的模式构建,这些模式根据config.h
的内容表现不同。在我的meson.build文件中,我使用函数configure_file()
生成这个头。
现在,我想改进我的构建系统,以便在一个单独的构建中编译多个模式的二进制文件。这意味着我必须同时管理不同版本的config.h
。
我的计划是创建不同版本的config.h
,并将它们保存在不同的文件夹中。然后,自定义每个Meson目标的包含目录,以选择我正在构建的模式的标题。
不幸的是,我发现您不能在output
选项configure_file()
中指定子文件夹。该文件将始终在与当前正在执行的meson.build
相同的位置创建。
这意味着我总是必须包括'.'
,不能区分不同的模式。注意:更改C源文件中的#include
指令不是一个选项。
在梅森有办法解决这个问题吗?
发布于 2020-08-08 13:58:46
让介子本机处理配置选项,而不是通过config.h
解析选项。
在meson_options.txt
文件中,可以声明自定义配置选项,如:
option('mode', type : 'combo', choices : ['one', 'two'], value : 'one')
然后,在配置生成时,可以通过调用以下命令创建单独的生成目录:
meson buildOne -Dmode=one
ninja -C buildOne
和,
meson buildTwo -Dmode=two
ninja -C buildTwo
然而,可能不希望采用上述方法?
另一种可能的方法是声明多个subproject()
。如果您当前的meson.build
不太具体,您可以尝试以下操作。
有一个新的主meson.build
,它处理打包,但也在子项目目录的子目录中复制一个模板meson.build,每个模式一个。这可能只需要几个额外的../../
来补偿不同的构建结构。
使用子项目声明的好处是,您可以重写该子项目的构建选项。这实际上意味着,您再次拥有单独的构建目录,但是只有一个主构建目录,只需要调用一次介子。
在这一思路中,您可以重构您的应用程序,并且只在专用子项目/库中构建不同的模式部分。
https://stackoverflow.com/questions/63221460
复制