У меня есть несколько проектов, созданных с использованием 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).