Build 如何用介子处理条件cflag?

Build 如何用介子处理条件cflag?,build,build-system,meson-build,Build,Build System,Meson Build,我对介子还不熟悉,现在只是浏览一下文档。在介子构建中,您推荐的处理条件CFLAG的方法是什么 假设对于VisualStudio,我想使用/DNOMINMAX和一组仅对生成的警告进行抑制,如/wd4626/wd4640等。您建议如何执行此操作 我使用目录层次结构和介子调用来获得编译器版本,从而解决了这个问题 在我的项目根目录中,我有一个用于配置的子目录,名为\u meson _meson/ meson.build compilers/ mes

我对介子还不熟悉,现在只是浏览一下文档。在介子构建中,您推荐的处理条件CFLAG的方法是什么


假设对于VisualStudio,我想使用/DNOMINMAX和一组仅对生成的警告进行抑制,如/wd4626/wd4640等。您建议如何执行此操作

我使用目录层次结构和介子调用来获得编译器版本,从而解决了这个问题

在我的项目根目录中,我有一个用于配置的子目录,名为
\u 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(“介子”)
以包含配置

\u meson/meson.build
调用
subdir('compilers')
,以引入有关编译器的配置-如果我以后有特定于平台的配置要添加,则会添加额外的一层

然后
\u 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)
最后一行指示介子包含与编译器同名的子目录。因此,在使用gcc编译时,这将计算为subdir('gcc')

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

# Put config information here...

# Include version specific configuration 
subdir(compiler_version_major + '.' + compiler_version_minor)
编译器名称下的子目录将包含特定编译器版本的配置信息,如果它们需要一些标志/config,而不是所有版本的编译器支持

如果可能的话,将
subdir()
设置为目录存在的条件将很有帮助,这样在使用编译器的不同特定版本进行构建时,该版本不会中断

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