如何用介子处理条件cflags



我是介子的新手,现在只是浏览一下文档。你推荐的在介子构建中处理条件cflags的方法是什么?

比如说,对于Visual Studio,我想使用/DNOMINMAX,并抑制一堆只有VS才会产生的警告,如/wd4626/wd4640等。你建议如何做到这一点?

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

在我的项目根目录中,我有一个名为_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

根CCD_ 2调用CCD_。

_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)

最后一行指示介子包含与编译器同名的子目录。因此,当使用gcc进行编译时,这将计算为subdir('cc')。

meson.build该编译器的所有版本的配置信息所在的位置。这个文件可能看起来像:

# Put config information here...
# Include version specific configuration 
subdir(compiler_version_major + '.' + compiler_version_minor)

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

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

注意:我还没有在windows上运行介子,所以我不能确定版本字符串是否像clang和gcc那样有3个部分

相关内容

  • 没有找到相关文章

最新更新