【发布时间】:2017-03-20 00:51:12
【问题描述】:
我的 cmake 项目将编译 c++14 代码。它还使用其外部库(我的项目中的 git 子模块)中包含的 CMakeLists.txts。在 macOS Sierra (cmake 3.6.2) 上构建失败,因为the default STL of clang is old and doesn't handle 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++>" )
然后它在链接时失败,因为它尝试使用 libstdc++ 进行链接。如何在 cmake 中指定新的 STL libc++ 将用于整个构建过程?
PS: 如果 gcc STL 太旧,clang 默认使用 gcc STL 的原因是什么?我可以永久指定它应该使用哪个 STL 吗?还是我做错了什么(我的一些子项目可以默默地强制 gcc 吗?)?
【问题讨论】:
-
更新:我的错误 stdlib 问题(以及上述问题)是由我的子 CMakeLists.txt 之一中的一行
set(CMAKE_OSX_DEPLOYMENT_TARGET 10.7)引起的;请参阅下面的评论!
标签: c++11 stl cmake clang c++14