Cmake: как выбрать заголовки C

#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.