cmake和默认编译器

Ant*_*sto 2 c++ gcc g++ cmake

我最近将我的OS X更新为Mountain Lion.不幸的是,FreeBSD切换到了一个不支持OpenMP的编译器套件(llvm/clang),我需要它,并且Apple将该套件设置为默认的编译工具.

幸运的是,OS X 10.8包含一个旧的gcc 4.2编译器,仍可用于某些遗留代码.

我使用cmake(v2.8)构建程序.为了使用gcc编译器,我首先尝试在CMakeLists.txt脚本中设置两个变量.更具体地说,我设置CMAKE_C_COMPILERCMAKE_CXX_COMPILER.但是,设置这两个变量没有任何效果:cmake继续使用不支持OpenMP的llvm编译器.

然后我尝试设置两个环境变量,CC并且CXX(在.profile/.bashrc脚本中)指向用于CMake变量的相同编译器.通过使用这两个变量,我能够编译我的源代码.

我的问题是:两个CMake变量(CMAKE _..._ COMPILER)有什么意义?我该如何使用它们?

谢谢.

Mic*_*ild 8

确实可以使用这些变量,但必须在自动检测编译器之前设置它们.您通常使用命令行或缓存初始化脚本来执行此操作:

# by setting CC anc CXX
CC=gcc-4.2 CXX=g++-4.2 cmake ...

# by passing the definitions of CMAKE_{C,CXX}_COMPILER to cmake directly
cmake -DCMAKE_C_COMPILER:FILEPATH=`which gcc-4.2` -DCMAKE_CXX_COMPILER:FILEPATH=`which g++-4.2` ...

# by passing a cache-initialization script
cmake -C init_cache.cmake
Run Code Online (Sandbox Code Playgroud)

文件init_cache.cmake包含的内容

set(CMAKE_C_COMPILER CACHE FILEPATH /usr/bin/gcc-4.2)
set(CMAKE_CXX_COMPILER CACHE FILEPATH /usr/bin/g++-4.2)
Run Code Online (Sandbox Code Playgroud)

  • 我只想补充一点,第一个选项(env.vars`CC`和`CXX`)通常被视为选择CMake编译器的首选方式.**并且**必须在新的二叉树中完成.一旦CMake检测到编译器,它们就会被放入其缓存中(并且很可能也是`CMakeTemp`). (2认同)