Cmake没有拿起指定的编译器

时间:2016-02-12 16:19:58

标签: gcc cmake

以下是设置:

$ cmake --version
cmake version 3.4.3

我希望它能够选择这些编译器:

$ ll /dist/gcc-4.8.2/bin/gcc
-rwxr-xr-x 3 root root 3112176 Nov  8  2013 /dist/gcc-4.8.2/bin/gcc
$# /dist/gcc-4.8.2/bin/gcc --version
gcc (GCC) 4.8.2

$ ll /dist/gcc-4.8.2/bin/g++
-rwxr-xr-x 4 root root 3121866 Nov  8  2013 /dist/gcc-4.8.2/bin/g++
$ /dist/gcc-4.8.2/bin/g++ --version
g++ (GCC) 4.8.2

...不是系统编译器:

$ ll /usr/bin/cc
lrwxrwxrwx. 1 root root 3 Nov 20  2014 /usr/bin/cc -> gcc
$ ll /usr/bin/gcc
-rwxr-xr-x. 2 root root 263952 Nov 21  2013 /usr/bin/gcc
$ /usr/bin/cc --version
cc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-4)

ll /usr/bin/c++
-rwxr-xr-x. 4 root root 267888 Nov 21  2013 /usr/bin/c++
$ /usr/bin/c++ --version
c++ (GCC) 4.4.7 20120313 (Red Hat 4.4.7-4)

当我运行cmake时,它会选择系统编译器:

$ cmake CXX=/dist/gcc-4.8.2/bin/g++ CC=/dist/gcc-4.8.2/bin/gcc ~/source/
-- The C compiler identification is GNU 4.4.7
-- The CXX compiler identification is GNU 4.4.7
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works

这不奇怪吗?

1 个答案:

答案 0 :(得分:2)

你正在做什么是行不通的,因为CMake不理解你使用的旗帜 您需要在调用CMake之前指定环境变量定义:

$ CXX=/dist/gcc-4.8.2/bin/g++ CC=/dist/gcc-4.8.2/bin/gcc cmake ~/source/

这是正常的shell语法,用于为以下命令指定环境变量。

但是,更正确的方法是从命令行定义CMake变量:

$ cmake -DCMAKE_CXX_COMPILER=/dist/gcc-4.8.2/bin/g++ -DCMAKE_C_COMPILER=/dist/gcc-4.8.2/bin/gcc ~/source/

根据CMake FAQ

  

对于C和C ++,设置CC和CXX环境变​​量。不保证此方法适用于所有生成器。 (具体来说,如果你试图设置Xcode的GCC_VERSION,这个方法会混淆Xcode。)

另外,在切换编译器时要小心删除完全目标目录,因为如果某些生成的CMake文件仍然存在,则根本不会有任何方法。