使用CMake GCC和Clang的/ LLVM之間切換
cmake llvm clang我公司擁有一批項(xiàng)目的CMake的,我希望能夠方便地切換GCC或鐺/ LLVM他們。我相信(請(qǐng)如果我錯(cuò)了!)表示鏘我需要進(jìn)行如下設(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")
是否有這些和默認(rèn)的GCC變量之間的切換,最好是全系統(tǒng)的變化,而不是具體的項(xiàng)目(即不只是將它們添加到項(xiàng)目的的CMakeLists.txt)一個(gè)簡(jiǎn)單的方法? 另外,是否有必要的llvm-*
節(jié)目鐺的gcc時(shí)代替,而不是系統(tǒng)默認(rèn)值?有什么區(qū)別?本文地址 :CodeGo.net/340772/ ------------------------------------------------------------------------------------------------------------------------- 1. CMake的榮譽(yù)的變量CC
和CXX
在檢測(cè)到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
具體標(biāo)志可以通過(guò)將它們放入一個(gè)系統(tǒng)范圍的CMake文件并指向CMAKE_USER_MAKE_RULES_OVERRIDE變量,它被覆蓋。創(chuàng)建一個(gè)文件~/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會(huì)讓CMake的初始化相應(yīng)的*_FLAGS
變量與給定的值。然后調(diào)用cmake的以下面的方式:$ cmake -DCMAKE_USER_MAKE_RULES_OVERRIDE=~/ClangOverrides.txt ..
終于到了LLVM的binutils力,設(shè)置內(nèi)部變量_CMAKE_TOOLCHAIN_PREFIX
。這個(gè)變量是由榮幸CMakeFindBinUtils
模塊:$ cmake -D_CMAKE_TOOLCHAIN_PREFIX=llvm- ..
把這個(gè)放在一起你可以寫一個(gè)shell包裝它設(shè)置了變量CC
和CXX
然后調(diào)用cmake的可變覆蓋。 2. 全系統(tǒng)的C ++的變化對(duì)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)
這樣,它會(huì)顯示為在GUI配置工具的cmake的選項(xiàng)。 為了讓您在整個(gè)系統(tǒng)可以在變量的默認(rèn)值或保持與答案。 4. 你絕對(duì)不需要不同的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")
這些都是為了工作,對(duì)LLVM內(nèi)部格式,因此阿仁'到您的應(yīng)用程序的生成。 作為一個(gè)說(shuō)明 CodeGo.net,O4將在你的程序調(diào)用的LTO,你可能不希望(這樣會(huì)大大)和鐺默認(rèn)為C99模式,使標(biāo)志不是必需的兩種。 5. 你的語(yǔ)法:$ENV{environment-variable}
在你的CMakeLists.txt
訪問(wèn)變量。你可以適當(dāng)?shù)貏?chuàng)建一個(gè)初始化的變量集的腳本,只是在引用這些變量的CMakeLists.txt
文件。