如何使用介子处理条件cflags?

时间:2015-12-23 17:35:19

标签: build build-system meson-build

我是meson的新手,现在只需查看文档。您在介子构建中处理条件cflags的推荐方法是什么?

对于Visual Studio我想要使用/ DNOMINMAX并且只抑制一堆警告只有VS产生像/ wd4626 / wd4640等。你会建议这样做吗?

1 个答案:

答案 0 :(得分:4)

我使用目录层次结构和meson调用解决了这个问题,以获得编译器版本。

在我的项目根目录中,我有一个名为_meson的配置文件的子目录。

_meson/
      meson.build 
      compilers/
               meson.build 
               clang/
                     meson.build
                     7.0/
                         meson.build
               gcc/
                     meson.build
                     4.9/
                         meson.build
               msvc/
                     meson.build 
                     vs2015/
                            meson.build
                     vs2010/
                            meson.build

meson.build调用subdir('_meson')以包含配置。

_meson/meson.build调用subdir('compilers')来引入有关编译器的配置 - 额外的层是以防我稍后要添加特定于平台的配置。

然后_meson/compilers/meson.build看起来像:

compiler_info = meson.get_compiler('cpp')

compiler = compiler_info.get_id()
compiler_version = compiler_info.version().split('-').get(0)

# setup some variables for compiler configurations
compiler_version_major = compiler_version.split('.').get(0)
compiler_version_minor = compiler_version.split('.').get(1)
compiler_version_build = compiler_version.split('.').get(2)

# load compiler configurations
subdir(compiler)

最后一行指示meson包含与编译器同名的子目录。因此,在使用gcc进行编译时,这将评估为subdir('gcc')。

meson.build是该编译器的所有版本的配置信息。此文件可能如下所示:

# Put config information here...

# Include version specific configuration 
subdir(compiler_version_major + '.' + compiler_version_minor)

编译器名称下的子目录将包含特定编译器版本的配置信息,如果它们需要一些标志/配置而不是所有版本的编译器支持。

如果可能的话,使subdir()以条目的存在为条件是有帮助的,这样在构建不同的编译器特定构建时构建不会中断。

警告:我还没有在Windows上运行介子,所以我不能确定版本字符串有3个部分,就像它对clang和gcc一样。