如何用介子处理条件标志?
How to handle conditional cflags with meson?
我是 meson 的新手,目前只是在浏览文档。在介子构建中处理条件 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
root 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)
编译器名称下的子目录将包含特定编译器版本的配置信息,如果它们需要某些 flags/config 并非所有版本的编译器支持。
如果可能,使 subdir()
以目录的存在为条件会很有帮助,这样在使用编译器的不同特定构建时构建不会中断。
警告:我在 windows 上还没有介子 运行,所以我不能确定版本字符串有 3 个部分,就像 clang 和gcc.
我是 meson 的新手,目前只是在浏览文档。在介子构建中处理条件 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
root 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)
编译器名称下的子目录将包含特定编译器版本的配置信息,如果它们需要某些 flags/config 并非所有版本的编译器支持。
如果可能,使 subdir()
以目录的存在为条件会很有帮助,这样在使用编译器的不同特定构建时构建不会中断。
警告:我在 windows 上还没有介子 运行,所以我不能确定版本字符串有 3 个部分,就像 clang 和gcc.