У мене є ряд проектів, побудованих за допомогою CMake, і я хотів би мати можливість легко переключатися між використанням GCC або Clang / LLVM для їх компіляції. Я вважаю (будь ласка, виправте мене, якщо я помиляюся!), Що для використання Clang мені потрібно встановити наступне:
SET (CMAKE_C_COMPILER "/usr/bin/clang")
SET (CMAKE_C_FLAGS "-Wall -std=c99")
SET (CMAKE_C_FLAGS_DEBUG "-g")
SET (CMAKE_C_FLAGS_MINSIZEREL "-Os -DNDEBUG")
SET (CMAKE_C_FLAGS_RELEASE "-O4 -DNDEBUG")
SET (CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g")
SET (CMAKE_CXX_COMPILER "/usr/bin/clang++")
SET (CMAKE_CXX_FLAGS "-Wall")
SET (CMAKE_CXX_FLAGS_DEBUG "-g")
SET (CMAKE_CXX_FLAGS_MINSIZEREL "-Os -DNDEBUG")
SET (CMAKE_CXX_FLAGS_RELEASE "-O4 -DNDEBUG")
SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g")
SET (CMAKE_AR "/usr/bin/llvm-ar")
SET (CMAKE_LINKER "/usr/bin/llvm-ld")
SET (CMAKE_NM "/usr/bin/llvm-nm")
SET (CMAKE_OBJDUMP "/usr/bin/llvm-objdump")
SET (CMAKE_RANLIB "/usr/bin/llvm-ranlib")
Чи існує простий спосіб перемикання між цими змінними GCC за замовчуванням, бажано як зміна загальносистемної системи, а не конкретна для проекту (тобто не просто додавання їх у CMakeLists.txt проекту)?
Також, чи потрібно використовувати llvm-*
програми, а не системні настройки за замовчуванням при компілюванні за допомогою clang замість gcc? Яка різниця?
CMAKE_USER_MAKE_RULES_OVERRIDE
творів. Здається, що файл ігнорується (тобто, незважаючи наCMAKE_C_FLAGS_RELEASE
те, що встановлено-O4
у файлі переопределення, він показує значення за замовчуванням-O3 -DNDEBUG
у cmake).