【问题标题】:Cmake did not use C++11 flag using CXX_STANDARD? [duplicate]Cmake 没有使用 CXX_STANDARD 的 C++11 标志? [复制]
【发布时间】:2017-03-30 14:17:40
【问题描述】:

我对 cmake 还很陌生,我正在尝试通过使用本教程将 mongodb 驱动程序用于 C++:https://mongodb.github.io/mongo-cxx-driver/mongocxx-v3/tutorial/。教程说你需要 C++11,所以我尝试了使用 CXX_STANDARD 属性的推荐方法。但它没有用。我终于放弃并使用了 add_definitions() 并且它起作用了!

cmake 文件显示了我尝试过的两种方法。即注释中的 add_definitions 和 set 属性方法(我先尝试过,但没有成功)。

它现在可以与add_definitions() 一起使用,但无论我转向哪里,人们都建议使用 CXX_STANDARD 或通过请求 C++11 功能让 cmake 自动使用 C++11。

那么,以后会因为某种原因而成为问题吗?为什么第一次没有成功?

我的 cmake 文件:

cmake_minimum_required(VERSION 3.2)

project(testproj CXX)

file(GLOB SRC src/*.cpp)

add_library(testproj SHARED ${SRC})

add_definitions(--std=c++11)
#set(TARGET testproj PROPERTY CXX_STANDARD 11)
#set(TARGET testproj PROPERTY CXX_STANDARD_REQUIRED ON)

# include directories
include_directories(/usr/local/include/mongocxx/v_noabi)
include_directories(/usr/local/include/libmongoc-1.0)
include_directories(/usr/local/include/bsoncxx/v_noabi)
include_directories(/usr/local/include/libbson-1.0)

# library path
link_directories(/usr/local/lib)
target_link_libraries(testproj mongocxx bsoncxx)

【问题讨论】:

  • 您的set(TARGET testproj PROPERTY CXX_STANDARD 11) 行已被注释掉。这是故意的吗?
  • 是的,我把它留在里面是为了展示我第一次是如何尝试的。我将编辑我的问题以使其更清楚。
  • 是的,向我们展示您要询问的代码,而不是其他代码。
  • @malat 标记重复的问题和答案都没有提到add_definitions()set(TARGET testproj PROPERTY CXX_STANDARD 11)。如果有的话,它是其中之一的副本 - stackoverflow.com/q/10851247/5209610stackoverflow.com/q/37621342/5209610
  • 几乎是重复的。在遵循这些链接后仔细检查,set() 应该是 set_property()。 set() 用于变量, set_property() 用于 cmake 属性。改变它,它就可以工作。谢谢大家。

标签: c++ c++11 cmake


【解决方案1】:

最好给整个项目定义c++11标志。

为此,您可以使用变量CMAKE_CXX_FLAGS 将其设置为全局标志,如下所示:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

由于这是一个全球电话,我建议您将其放在project 行的下方。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-12
    • 1970-01-01
    • 1970-01-01
    • 2018-11-09
    • 1970-01-01
    • 1970-01-01
    • 2013-11-22
    • 1970-01-01
    相关资源
    最近更新 更多