Мой проект cmake должен скомпилировать код C++ 14. Он также использует CMakeLists.txts, включенные в его внешние библиотеки (которые являются подмодулями git в моем проекте). Сбой сборки на macOS Sierra (cmake 3.6.2), потому что the default STL of clang is old and doesn't handle c++11. Насколько я понимаю, есть два STL, поставляемых с clang: libstdC++ (из gcc) (по умолчанию) или libC++. Так что, если я добавить опцию -stdlib=libc++
в CMake, источник компилирует:Пусть cmake с использованием clang C++ 11 (C++ 14)
add_compile_options("$<$<COMPILE_LANGUAGE:CXX>:-std=c++14>")
add_compile_options("$<$<COMPILE_LANGUAGE:CXX>:-stdlib=libc++>")
Но тогда он не во время компоновки, потому что он пытается использовать libstdC++ для связывания. Как указать в cmake, что новый STL libC++ должен использоваться для всего процесса сборки?
PS: Что такое обоснование clang с использованием gcc STL по умолчанию, если оно слишком старое? Могу ли я навсегда указать, какой STL он должен использовать? Или я делаю что-то совершенно неправильное (могут ли некоторые из моих подпроектов молча заставить gcc?)?
Обновление: Моя проблема с неправильным stdlib (и вопросами выше) была вызвана линией 'set (CMAKE_OSX_DEPLOYMENT_TARGET 10.7)' в одном из моих sub-CMakeLists.txt; см. комментарий ниже! – telephone