【问题标题】:Mixing C and C++ sources in cmake [duplicate]在cmake中混合C和C++源[重复]
【发布时间】:2015-01-05 21:41:22
【问题描述】:

我正在尝试编译 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 代码设置标准。

【问题讨论】:

  • 看看更新后的答案,我忘了用上一个答案你会覆盖已经设置的标志。
  • 我注意到了这一点,所以我将标准附加到了标志上。谢谢

标签: c++ c c++11 cmake


【解决方案1】:

您不应该为此使用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 之类的定义。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      首先要测试编译器是否支持C++11,查看宏CheckCXXCompilerFlag中包含的check_cxx_compiler_flag

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-06-09
        • 1970-01-01
        • 2020-04-18
        • 1970-01-01
        • 1970-01-01
        • 2013-02-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多