【发布时间】:2020-10-07 02:07:17
【问题描述】:
我正在尝试在基于 cmake 的构建中分别控制 C 和 C++ 代码的编译器警告:
对于 gcc 和 clang,我可以使用 TARGET_COMPILE_OPTIONS 设置仅适用于 C 编译器的附加标志:
target_compile_options(MyLib PRIVATE
$<$<AND:$<COMPILE_LANGUAGE:C>,$<NOT:$<CXX_COMPILER_ID:MSVC>>>: -Wall>)
现在我想做同样的事情,但对于 MSVC:
$<$<AND:$<COMPILE_LANGUAGE:C>,$<CXX_COMPILER_ID:MSVC>>: /W4>
这不起作用 - 在混合 C/C++ 项目中基于 MSVC 的构建似乎忽略了 COMPILE_LANGUAGE:C。我正在使用 Visual Studio 2019 进行测试。
有人对此有解决方案吗?
(不只是为 C 代码使用单独的目标)
【问题讨论】:
-
旁白:对于 MSVC,我使用了三个笼统的定义来防止 MS 将其政策推向我并掩盖更多相关的警告。
#define _CRT_SECURE_NO_WARNINGS和#define _CRT_SECURE_NO_DEPRECATE和#define _CRT_NONSTDC_NO_DEPRECATE。我将它们放在每个 C 源文件的顶部,在任何#include语句之前。
标签: c++ c visual-c++ cmake compiler-warnings