如何让CMake在系统PATH上使用默认编译器?

时间:2015-04-27 18:01:47

标签: linux path cmake cc

There是同一个问题和答案。 问题是答案似乎是错误的(实际上不是问题的答案)。我可以重新问一下这个问题吗? 问题:

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
$ whereis gcc
cc: /usr/bin/gcc /usr/lib/gcc /usr/local/bin/gcc /usr/libexec/gcc
$ which gcc
/usr/local/bin/gcc
$ /usr/bin/gcc -v
gcc version 4.1.2
$ /usr/local/bin/gcc -v
gcc version 4.8.4
$ gcc -v
gcc version 4.8.4
$ cmake .
-- The C compiler identification is GNU 4.1.2
...
...

本地GCC版本(如果4.8.4)和系统的默认版本是' 4.1.2'。所有其他工具链都遵循PATH环境变量并使用本地(较新的)GCC版本。除了CMAKE之外的所有。 设置CC不是一个好主意,因为可能还有其他二进制工具也可以使用。 在脚本开头设置CMAKE_PROGRAM_PATH和CMAKE_PREFIX_PATH并不能帮助检测编译器。
有没有办法强制CMAKE尊重PATH变量?

2 个答案:

答案 0 :(得分:4)

正如other question的答案中所写,在搜索C和C ++编译器时,CMake更喜欢通用编译器名ccc++。这些可能是指您系统上的GNU 4.1版编译器。

无论如何,要强制CMake使用系统路径上的默认编译器,请将以下代码添加到最外层CMakeLists.txt的开头。

find_program(CMAKE_C_COMPILER NAMES $ENV{CC} gcc PATHS ENV PATH NO_DEFAULT_PATH)
find_program(CMAKE_CXX_COMPILER NAMES $ENV{CXX} g++ PATHS ENV PATH NO_DEFAULT_PATH)
...
project (Foo C CXX)

find_program来电必须在致电projectenable_language之前进行。

答案 1 :(得分:2)

CMake尊重环境变量CXXCC=gcc CXX=g++ cmake ..... 。您可以导出或只为cmake设置它们。

$img= CHtml::image(Yii::app()->baseUrl.'/imagepath','altText',array('height'=>100,'width'=>100));
$link = CHtml::link($img, array('baseurl/page','id'=>'page_id'));
echo $link;

请注意,这仅适用于空构建目录。更改现有目录上的编译器不会像这样工作。