Mam wiele projektów zbudowanych przy użyciu CMake i chciałbym móc łatwo przełączać się między nimi za pomocą GCC lub Clang / LLVM w celu ich skompilowania. Wierzę (popraw mnie, jeśli się mylę!), Że aby użyć Clanga, muszę ustawić następujące ustawienia:
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")
Czy istnieje prosty sposób przełączania między tymi a domyślnymi zmiennymi GCC, najlepiej jako zmiana ogólnosystemowa, a nie specyficzna dla projektu (tj. Nie tylko dodanie ich do pliku CMakeLists.txt projektu)?
Czy konieczne jest także używanie llvm-*
programów zamiast domyślnych ustawień systemu podczas kompilacji przy użyciu clang zamiast gcc? Co za różnica?
CMAKE_USER_MAKE_RULES_OVERRIDE
prac. Wygląda na to, że plik jest ignorowany (tzn. PomimoCMAKE_C_FLAGS_RELEASE
ustawienia-O4
w pliku przesłonięć, pokazuje domyślną wartość-O3 -DNDEBUG
w cmake).