Eu tenho vários projetos criados usando o CMake e gostaria de poder alternar facilmente entre usar o GCC ou o Clang / LLVM para compilá-los. Acredito (por favor, corrija-me se estiver enganado!) Que, para usar o Clang, preciso definir o seguinte:
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")
Existe uma maneira fácil de alternar entre essas e as variáveis padrão do GCC, preferencialmente como uma alteração em todo o sistema, em vez de específica do projeto (ou seja, não apenas adicioná-las ao CMakeLists.txt do projeto)?
Além disso, é necessário usar os llvm-*
programas em vez dos padrões do sistema ao compilar usando clang em vez de gcc? Qual é a diferença?
CMAKE_USER_MAKE_RULES_OVERRIDE
obras. Parece que o arquivo está sendo ignorado (ou seja, apesar deCMAKE_C_FLAGS_RELEASE
estar definido-O4
no arquivo de substituição, está mostrando o valor padrão-O3 -DNDEBUG
em cmake).