Ho un certo numero di progetti realizzati con CMake e vorrei poter passare facilmente dall'uso di GCC o Clang / LLVM per compilarli. Credo (per favore correggimi se sbaglio!) Che per usare Clang devo impostare quanto segue:
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")
Esiste un modo semplice per alternare tra queste e le variabili GCC predefinite, preferibilmente come una modifica a livello di sistema piuttosto che specifica del progetto (ovvero non aggiungendole semplicemente al CMakeLists.txt di un progetto)?
Inoltre, è necessario utilizzare i llvm-*
programmi anziché i valori predefiniti del sistema durante la compilazione usando clang invece di gcc? Qual è la differenza?
CMAKE_USER_MAKE_RULES_OVERRIDE
opere. Sembra che il file venga ignorato (ovvero, nonostanteCMAKE_C_FLAGS_RELEASE
sia impostato su-O4
nel file di sostituzione, mostra il valore predefinito-O3 -DNDEBUG
in in cmake).