使用CMake GCC和Clang的/ LLVM之間切換
cmake llvm clang我公司擁有一批項目的CMake的,我希望能夠方便地切換GCC或鐺/ LLVM他們。我相信(請如果我錯了!)表示鏘我需要進行如下設(shè)置: 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變量之間的切換,最好是全系統(tǒng)的變化,而不是具體的項目(即不只是將它們添加到項目的的CMakeLists.txt)一個簡單的方法? 另外,是否有必要的llvm-*
節(jié)目鐺的gcc時代替,而不是系統(tǒng)默認值?有什么區(qū)別?本文地址 :CodeGo.net/340772/ ------------------------------------------------------------------------------------------------------------------------- 1. CMake的榮譽的變量CC
和CXX
在檢測到C和C ++編譯器$ export CC=/usr/bin/clang $ export CXX=/usr/bin/clang++ $ cmake .. -- The C compiler identification is Clang -- The CXX compiler identification is Clang
具體標志可以通過將它們放入一個系統(tǒng)范圍的CMake文件并指向CMAKE_USER_MAKE_RULES_OVERRIDE變量,它被覆蓋。創(chuàng)建一個文件~/ClangOverrides.txt
其內(nèi)容如下:SET (CMAKE_C_FLAGS_INIT "-Wall -std=c99") SET (CMAKE_C_FLAGS_DEBUG_INIT "-g") SET (CMAKE_C_FLAGS_MINSIZEREL_INIT "-Os -DNDEBUG") SET (CMAKE_C_FLAGS_RELEASE_INIT "-O4 -DNDEBUG") SET (CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "-O2 -g") SET (CMAKE_CXX_FLAGS_INIT "-Wall") SET (CMAKE_CXX_FLAGS_DEBUG_INIT "-g") SET (CMAKE_CXX_FLAGS_MINSIZEREL_INIT "-Os -DNDEBUG") SET (CMAKE_CXX_FLAGS_RELEASE_INIT "-O4 -DNDEBUG") SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT "-O2 -g")
后綴_init會讓CMake的初始化相應的*_FLAGS
變量與給定的值。然后調(diào)用cmake的以下面的方式:$ cmake -DCMAKE_USER_MAKE_RULES_OVERRIDE=~/ClangOverrides.txt ..
終于到了LLVM的binutils力,設(shè)置內(nèi)部變量_CMAKE_TOOLCHAIN_PREFIX
。這個變量是由榮幸CMakeFindBinUtils
模塊:$ cmake -D_CMAKE_TOOLCHAIN_PREFIX=llvm- ..
把這個放在一起你可以寫一個shell包裝它設(shè)置了變量CC
和CXX
然后調(diào)用cmake的可變覆蓋。 2. 全系統(tǒng)的C ++的變化對Ubuntu的: sudo用update-alternatives-配置C ++ 將打印是這樣的: Selection Path Priority Status ------------------------------------------------------------ * 0 /usr/bin/g++ 20 auto mode 1 /usr/bin/clang++ 10 manual mode 2 /usr/bin/g++ 20 manual mode
然后,只需選擇鐺++。 3. 你的option(USE_CLANG "build application with clang" OFF) # OFF is the default
然后在包裹如果()S中的設(shè)置:if(USE_CLANG) SET (...) .... endif(USE_CLANG)
這樣,它會顯示為在GUI配置工具的cmake的選項。 為了讓您在整個系統(tǒng)可以在變量的默認值或保持與答案。 4. 你絕對不需要不同的LLVM-AR等程序: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")
這些都是為了工作,對LLVM內(nèi)部格式,因此阿仁'到您的應用程序的生成。 作為一個說明 CodeGo.net,O4將在你的程序調(diào)用的LTO,你可能不希望(這樣會大大)和鐺默認為C99模式,使標志不是必需的兩種。 5. 你的語法:$ENV{environment-variable}
在你的CMakeLists.txt
訪問變量。你可以適當?shù)貏?chuàng)建一個初始化的變量集的腳本,只是在引用這些變量的CMakeLists.txt
文件。