我正在将一个小应用程序部署到需要编译的几个不同系统(mac,linux,linux64)。我想告诉cmake在特定系统中可用的最新gcc。例如,Mac 10.6具有gcc 4.0和gcc 4.2(默认值)。但是有些用户也通过MacPorts安装了gcc 4.4(它不是默认设置)。在这种情况下,我希望cmake使用gcc44。在其他Linux系统中,最新的gcc是4.4或4.5。实现这一目标的更强大的方法是什么?
谢谢,
H
答案 0 :(得分:8)
在检测到要使用的C和C ++编译器时,CMake尊重环境变量CC
和CXX
。例如,如果这些变量指向clang,它将默认使用clang:
$ export CC=/usr/bin/clang
$ export CXX=/usr/bin/clang++
$ cmake ..
-- The C compiler identification is Clang
-- The CXX compiler identification is Clang
-- Check for working C compiler: /usr/bin/clang
-- Check for working C compiler: /usr/bin/clang -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/clang++
-- Check for working CXX compiler: /usr/bin/clang++ -- works
...
您可以将这些定义为指向首选编译器的系统范围的环境变量,也可以编写一个小的shell包装脚本来测试多个编译器的可用性,并在调用cmake之前相应地设置变量。
答案 1 :(得分:0)
我必须将它添加到我的CMakeLists.txt才能工作:
if($ENV{CXX})
set(CMAKE_CXX_COMPILER $ENV{CXX} CACHE FILEPATH "CXX Compiler")
endif()
if($ENV{CC})
set(CMAKE_CC_COMPILER $ENV{CC} CACHE FILEPATH "CC Compiler")
endif()
答案 2 :(得分:0)
另一个技巧是确保使用所需的GCC是在CMake之前执行以下操作:
export PATH=/path/to/my/gcc:$PATH