【问题标题】:How to handle conditional cflags with meson?如何用介子处理条件标志?
【发布时间】:2015-12-23 17:35:19
【问题描述】:

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

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

【问题讨论】:

    标签: build build-system meson-build


    【解决方案1】:

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

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

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-18
      • 1970-01-01
      • 1970-01-01
      • 2022-09-29
      • 1970-01-01
      • 1970-01-01
      • 2013-05-20
      • 1970-01-01
      相关资源
      最近更新 更多