Error

C++博客 首页 新随笔 联系 聚合 管理
  217 Posts :: 61 Stories :: 32 Comments :: 0 Trackbacks

使用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的荣誉的变量CCCXX在检测到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包装它设置了变量CCCXX然后调用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文件。
posted on 2015-08-20 11:52 Enic 阅读(1371) 评论(0)  编辑 收藏 引用 所属分类: linux

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理