如何让 CMake 在系统 PATH 上使用默认编译器?
How to get CMake to use the default compiler on system PATH?
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 变量?
正如 other question 的答案中所写,CMake 在搜索 C 和 C++ 编译器时更喜欢通用编译器名称 cc
和 c++
。这些可能是指您系统上的 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
调用必须在调用 project
或 enable_language
之前发生。
CMake 尊重环境变量 CC
和 CXX
。您可以导出或只为 cmake 设置它们。
CC=gcc CXX=g++ cmake .....
请注意,这仅适用于空构建目录。在现有目录上更改编译器不会像这样工作。
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 变量?
正如 other question 的答案中所写,CMake 在搜索 C 和 C++ 编译器时更喜欢通用编译器名称 cc
和 c++
。这些可能是指您系统上的 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
调用必须在调用 project
或 enable_language
之前发生。
CMake 尊重环境变量 CC
和 CXX
。您可以导出或只为 cmake 设置它们。
CC=gcc CXX=g++ cmake .....
请注意,这仅适用于空构建目录。在现有目录上更改编译器不会像这样工作。