【发布时间】: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/5209610、stackoverflow.com/q/37621342/5209610。 -
几乎是重复的。在遵循这些链接后仔细检查,set() 应该是 set_property()。 set() 用于变量, set_property() 用于 cmake 属性。改变它,它就可以工作。谢谢大家。