使用CMake GCC和Clang的/ LLVM之间切换
cmake llvm clang我公司拥有一批项目的CMake的,我希望能够方便地切换GCC或铛/ LLVM他们。我相信(请如果我错了!)表示锵我需要进行如下设置: 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变量之间的切换,最好是全系统的变化,而不是具体的项目(即不只是将它们添加到项目的的CMakeLists.txt)一个简单的方法? 另外,是否有必要的llvm-*
节目铛的gcc时代替,而不是系统默认值?有什么区别?本文地址 :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
具体标志可以通过将它们放入一个系统范围的CMake文件并指向CMAKE_USER_MAKE_RULES_OVERRIDE变量,它被覆盖。创建一个文件~/ClangOverrides.txt
其内容如下: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
变量与给定的值。然后调用cmake的以下面的方式:$ cmake -DCMAKE_USER_MAKE_RULES_OVERRIDE=~/ClangOverrides.txt ..
终于到了LLVM的binutils力,设置内部变量_CMAKE_TOOLCHAIN_PREFIX
。这个变量是由荣幸CMakeFindBinUtils
模块:$ cmake -D_CMAKE_TOOLCHAIN_PREFIX=llvm- ..
把这个放在一起你可以写一个shell包装它设置了变量CC
和CXX
然后调用cmake的可变覆盖。 2. 全系统的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中的设置:if(USE_CLANG) SET (...) .... endif(USE_CLANG)
这样,它会显示为在GUI配置工具的cmake的选项。 为了让您在整个系统可以在变量的默认值或保持与答案。 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内部格式,因此阿仁'到您的应用程序的生成。 作为一个说明 CodeGo.net,O4将在你的程序调用的LTO,你可能不希望(这样会大大)和铛默认为C99模式,使标志不是必需的两种。 5. 你的语法:$ENV{environment-variable}
在你的CMakeLists.txt
访问变量。你可以适当地创建一个初始化的变量集的脚本,只是在引用这些变量的CMakeLists.txt
文件。