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

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

$ 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环境variables,并使用本地(较新的)GCC版本。 除了CMAKE之外的所有。 设置CC不是一个好主意,因为可能还有其他的二进制工具也可以使用。 在脚本的开头设置CMAKE_PROGRAM_PATH和CMAKE_PREFIX_PATH并不能帮助检测编译器。
有没有办法强制CMAKE尊重PATHvariables?

正如已经在其他问题的答案中所写的那样,当搜索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

CMake尊重环境变量CCCXX 。 您可以导出或只是将它们设置为cmake。

 CC=gcc CXX=g++ cmake ..... 

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