让cmake用clang使用c ++ 11(c ++ 14)

tel*_*one 4 stl cmake clang c++11 c++14

我的cmake项目应该编译c ++ 14代码.它还使用其外部库(在我的项目中是git子模块)中包含的CMakeLists.txts.在macOS Sierra(cmake 3.6.2)上构建失败,因为clang的默认STL是旧的并且不处理c ++ 11.据我所知,clang附带了两个STL:libstdc ++(来自gcc)(默认)或libc ++.因此,如果我将-stdlib=libc++选项添加到cmake,则源编译:

add_compile_options( "$<$<COMPILE_LANGUAGE:CXX>:-std=c++14>" )
add_compile_options( "$<$<COMPILE_LANGUAGE:CXX>:-stdlib=libc++>" )
Run Code Online (Sandbox Code Playgroud)

但是它在链接时失败了,因为它试图使用libstdc ++进行链接.如何在cmake中指定新的STL libc ++将用于整个构建过程?

PS:如果它太旧了,默认使用gcc STL的原因是什么?我可以永久地指定它应该使用哪个STL吗?或者我做了一些完全错误的事情(我的一些子项目可以默默地强制gcc吗?)?

was*_*ful 8

您应该依赖CMake来处理编译选项.只需指定所需的标准版本:

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
Run Code Online (Sandbox Code Playgroud)

target_compile_features也可用于要求标准的特定功能(并隐式要求CMake设置适当的配置).更多信息在这里.


编辑

您找到了解决方案,您还必须删除Ogred3D的CMakeLists中的以下行:

set(CMAKE_OSX_DEPLOYMENT_TARGET 10.7)
Run Code Online (Sandbox Code Playgroud)

删除它阻止CMake添加mmacosx-version-min=10.7导致错误的标志.