Cmake没有使用CXX_STANDARD使用C ++ 11标志?

时间:2017-03-30 14:17:40

标签: c++ c++11 cmake

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

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

现在可以与add_definitions()一起使用,但在任何地方我都会建议使用CXX_STANDARD或让cmake通过请求C ++ 11功能自动使用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)

1 个答案:

答案 0 :(得分:-1)

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

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

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

由于这是一次全球通话,我建议您将它放在project行的下方。