#c #linux #gcc #cmake #clang
#c #linux #gcc #cmake #лязг
Вопрос:
Я хочу выбирать между использованием gcc
и clang
, а также хочу выбирать между libstdc
и libc
. На этом сайте объясняется, как смешивать компиляторы и стандартные библиотеки. Я могу выбирать между компиляторами, вызывая cmake
like CC=gcc CCX=g cmake...
или with CC=clang...
.
Проблема в том, что libstdc
мне нужно использовать флаг -I/usr/include/c /5
и с libc
-I/usr/include/c /v1
.
По соображениям переносимости я не хочу включать указанные выше пути ни в CMakeListst.txt
, ни в качестве аргумента командной строки. Есть ли способ сделать это и разрешить cmake
автоматическое определение?
Комментарии:
1. Вы имеете в виду, что при запуске cmake вы хотите выбрать компилятор (gcc / clang) и стандартную библиотеку c (libstdc / libc ). Итак, вам нужен скрипт camke, например
if( clang )...else if( gcc )
?2. @CodeDreamer, я отредактировал вопрос.
Ответ №1:
Возможно, вы уже знаете это, find_package
boost или openssl также видят определенную переменную среды, такую как BOOST_ROOT
and OPENSSL_ROOT_DIR
. Поэтому вам также нужна такая переменная подсказки.
Как сценарий cpprestsdk cmake,
Я думаю CMakeLists.txt
, что ваш
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
message("-- Setting clang option")
include_directories(${Your_path})
...
elseif(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
message("-- Setting gcc options")
include_directories(${Your_path})
...
else()
message("-- Unknown compiler, success is doubtful.")
message("CMAKE_CXX_COMPILER_ID=${CMAKE_CXX_COMPILER_ID}")
endif()
Комментарии:
1. Спасибо. Я надеялся, что пути будут обнаружены автоматически и скрыты в некоторых переменных CMake.