[英]cmake: how to add a compiler flag according to current compiler version
我有 ac 库要维护,它是由 cmake 构建的。 当我开始构建它时,它告诉我
cc1: warning: unrecognized command line option "-Wno-incompatible-pointer-types" [enabled by default]
是的,我的 gcc 版本是 4.8.5 并且没有那个标志。 因此,当编译器不支持该标志时,我想禁用它。
经过一番搜索,我来到了这个解决方案
include(CheckCCompilerFlag)
check_c_compiler_flag(-Wno-invalid-offsetof HAS_NO_INVALID_OFFSETOF)
if (HAS_NO_INVALID_OFFSETOF)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-invalid-offsetof")
endif()
但是当我将它添加到我的 CMakeLists.txt 时,它不起作用,仍然出现上述警告。
搜索 cmake 文档后,它告诉我
此检查的肯定结果仅表明编译器在给定标志时未发出诊断消息。 标志是否有任何效果甚至是特定的效果超出了本模块的范围。
据此,我的 gcc 不支持该标志,它不会发出诊断消息,所以 cmake 认为我的 gcc 支持该标志?
有没有办法让它像我喜欢的那样行事?
引用man gcc
当请求无法识别的警告选项时(例如,
-Wunknown-warning
),GCC 会发出一个诊断信息,指出该选项未被识别。 但是,如果使用-Wno-
形式,则行为略有不同:除非正在生成其他诊断信息,否则不会为-Wno-unknown-warning
生成任何诊断信息。 这允许对旧编译器使用新的-Wno-
选项,但如果出现问题,编译器会警告存在无法识别的选项。
您可以将支票修改为以下内容
include(CheckCCompilerFlag)
check_c_compiler_flag(-Winvalid-offsetof HAS_INVALID_OFFSETOF)
if (HAS_INVALID_OFFSETOF)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-invalid-offsetof")
endif()
对于某些碰巧支持-Winvalid-offsetof
但不支持-Wno-invalid-offsetof
非 gcc 编译器,理论上这可能会中断。 因此,如果您想更加安全,请添加另一张支票。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.