繁体   English   中英

cmake:如何根据当前编译器版本添加编译器标志

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM