Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 同一meson.build中具有不同配置文件的多个目标?_C_Meson Build - Fatal编程技术网

C 同一meson.build中具有不同配置文件的多个目标?

C 同一meson.build中具有不同配置文件的多个目标?,c,meson-build,C,Meson Build,我的C应用程序可以使用不同的模式构建,根据config.h的内容,这些模式的行为会有所不同。 在我的meson.build文件中,我使用configure_file函数生成这个头文件 现在我想改进我的构建系统,在一个构建中为多种模式编译二进制文件。这意味着我必须同时管理不同版本的config.h 我的计划是创建不同版本的config.h并将它们保存在不同的文件夹中。然后,定制每个介子目标的include目录,为我正在构建的模式选择头部 不幸的是,我发现您不能在configure_file的输出选

我的C应用程序可以使用不同的模式构建,根据config.h的内容,这些模式的行为会有所不同。 在我的meson.build文件中,我使用configure_file函数生成这个头文件

现在我想改进我的构建系统,在一个构建中为多种模式编译二进制文件。这意味着我必须同时管理不同版本的config.h

我的计划是创建不同版本的config.h并将它们保存在不同的文件夹中。然后,定制每个介子目标的include目录,为我正在构建的模式选择头部

不幸的是,我发现您不能在configure_file的输出选项中指定子文件夹。该文件将始终在与当前正在执行的meson.build相同的位置创建

这意味着我必须始终包含“.”,并且无法区分不同的模式。注意:更改C源文件中的include指令不是一个选项


有没有办法在介子中解决这个问题?

让介子以本机方式处理配置选项,而不是通过config.h解析选项来解决这个问题

在meson_options.txt文件中,可以声明自定义配置选项,例如:

option('mode', type : 'combo', choices : ['one', 'two'], value : 'one')
然后,在配置生成时,可以通过调用以下命令创建单个生成目录:

meson buildOne -Dmode=one
ninja -C buildOne
以及

然而,上述方法可能并不可取

另一种可能的方法是声明多个子项目。如果您当前的meson.build不太具体,您可以尝试以下方法

有一个处理打包的新主meson.build,但也在子项目目录的子目录中复制一个模板meson.build,每个模式一个。这可能只需要几个额外的.././来补偿不同的构建结构

子项目声明的好处在于,您可以覆盖该子项目的构建选项。 这实际上意味着,您又有了单独的构建目录,但只有一个主构建目录,并且只需要调用介子一次


按照这种思路,您可以重构应用程序,并在专用子项目/库中只构建不同的模式部分。

而不是尝试将config.h保存到不同的目录中。是否可以先更改目录?i、 e:mkdir config1&&cd config1&&&mkdir../config2&&cd../config2&&如果不是这样,则可能运行一个循环:对于config1中的i,config2;做mkdir$i;mv config.h$i;doneThanks对于评论,是否可以直接从介子文件中移动头而不是使用bash脚本?不知道,抱歉。这不是我使用的工具,这些建议只是我在过去遇到类似情况时的想法。谢谢你的评论!我将回顾这两个建议,看看什么对我的项目更有意义。
meson buildTwo -Dmode=two
ninja -C buildTwo