在 cmake 中混合 C 和 C++ 源代码

Mixing C and C++ sources in cmake

我正在尝试编译 C 和 C++ 源代码。 目前我通过将此行添加到 cmake 文件 add_definitions(-std=c++0x) 来使用 C++ 的 c++0x 标准。

在编译期间,我收到以下警告:cc1: warning: command line option ‘-std=c++11’ is valid for C++/ObjC++ but not for C [enabled by default] 和此错误:error: ‘for’ loop initial declarations are only allowed in C99 mode 引用了 c 代码中的 for 循环。

我想知道如何在 cmake 文件中为 c 代码设置标准。

而不是 add_definitions 你应该使用这样的东西:

set(CMAKE_CXX_FLAGS "-std=c++0x")

你不应该为此使用 add_definitions,而应该使用

SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99")

-std=c99 如果你想要循环初始声明。

add_definitions 用于 -DUSE_SOME_LIBRARY.

等定义

您应该首先测试编译器是否支持 C++11,请参阅宏 CheckCXXCompilerFlag

中包含的 check_cxx_compiler_flag