【问题标题】:How to Get CMake to Use Default Compiler on System PATH?如何让 CMake 在系统 PATH 上使用默认编译器?
【发布时间】:2013-04-11 01:42:27
【问题描述】:

目前,我从我的构建目录调用 CMake,如下所示:

CXX="/opt/gcc-4.8/bin/g++" cmake ..

让 CMake 使用这个特定的编译器。否则它使用操作系统默认编译器。

我的路径在其他所有内容前面都有“/opt/gcc-4.8/bin”。那么,有没有办法在“`CMakeLists.txt”文件中指定在路径上使用默认的g++,而不是预先设置环境变量?

【问题讨论】:

  • 叹气,是的,太烦人了。如果项目是您自己的(或者如果您可以提交拉取请求),您可以参考this SO answer,了解如何使用CMakeFiles.txt 中的几个find_programs 来解决此问题,以便从中获取C 和C++ 编译器$PATH 环境变量——不需要符号链接。尤其是在我们广泛使用 modules 的 HPC 环境中,在我看来,这似乎是明智的默认行为,不幸的是 不是 CMake 的默认行为。

标签: compiler-construction cmake


【解决方案1】:

CMake 尊重PATH 环境变量的设置,但优先考虑通用编译器名称ccc++。要确定 CMake 在 UNIX 下默认使用哪个 C 编译器,请运行:

$ which cc

要确定默认的 C++ 编译器,请运行:

$ which c++

如果您在/opt/gcc-4.8/bin 中生成指向/opt/gcc-4.8/bin/g++ 的符号链接c++,则CMake 应默认使用GCC 4.8。

【讨论】:

  • 好的,谢谢。原来我正在运行的 shell 脚本弄乱了我的 PATH。接受此答案以获取有用信息“CMake 尊重 PATH 环境变量的设置,但优先考虑通用编译器名称 cc 和 c++”。
【解决方案2】:

cc 而不是c++ 的位置决定了将使用哪个c++ cmake。例如,如果您有/usr/local/bin/c++ 但有/usr/local/bin/cc,cmake 仍会选择/usr/bin/c++,而不是/usr/local/bin/c++。在这种情况下,在 /usr/local/bin/cc 创建指向 /usr/local/bin/gcc 的符号链接将使 cmake 使用 /usr/local/bin/c++

另一种方法是将项目的语言显式设置为 C++:

project(foo CXX)

【讨论】:

  • 谢谢;这很有帮助。不幸的是,当我添加这样的符号链接时,CMake 还坚持从同一目录中获取 Python(即使我想要的 Python 在我的 PATH 中更早)。真的没有办法说服这件事只是为了从我的 PATH 中获取东西,就像从一开始的所有其他 Unix 实用程序一样?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-28
  • 2010-12-13
  • 1970-01-01
  • 2021-10-02
  • 2013-11-15
  • 1970-01-01
相关资源
最近更新 更多