CMake:选择编译器的正确方法,无需对其路径进行硬编码

标签 c cmake

我是 CMake 新手,我正在尝试为现有项目创建 CMake,该项目必须在多个 Linux 和 Windows 计算机上交叉编译 ARM 代码,因此编译器的硬编码路径不是一个选项。 到目前为止,编译器的路径已添加到每个用户路径中,因此您只需从控制台调用armcc即可执行正确的编译器版本。 我还没有找到像我尝试过的 CMake 那样指定编译器的方法:

  1. SET(CMAKE_C_COMPILER "armcc") - 它返回:CMAKE_C_COMPILER: armcc 不是完整路径,未在 PATH 中找到。
  2. find_program(CMAKE_C_COMPILER NAMES armcc) - 它总是返回 /usr/bin/cc

我确信第一条消息不正确,因为 armcc 的路径位于 PATH 变量中。我使用的是 cmake 版本 3.6.2。

最佳答案

这在 CMake FAQ 中有详细说明。 :

方法一:使用环境变量

对于 C 和 C++,设置 CCCXX 环境变量。这个方法 不保证适用于所有发电机。 (具体来说,如果您是 尝试设置 Xcode 的 GCC_VERSION,此方法会使 Xcode 感到困惑。)

例如:

CC=gcc-4.2 cmake -G "Your Generator" path/to/your/source

方法二:使用cmake -D

将适当的CMAKE_FOO_COMPILER变量设置为有效的编译器 使用 cmake -D 在命令行上指定名称或完整路径。

例如:

cmake -G "Your Generator" -D CMAKE_C_COMPILER=gcc-4.2 path/to/your/source

方法3(避免):使用set()

将适当的CMAKE_FOO_COMPILER变量设置为有效的编译器 使用 set() 列表文件中的名称或完整路径。这必须完成 在设置任何语言之前(即在任何 project() 之前或 enable_language() 命令)。

例如:

set(CMAKE_C_COMPILER "gcc-4.2")

project("YourProjectName")

我的猜测是,由于您没有提供任何代码并且没有阅读手册,因此您正在尝试在设置语言之后设置编译器。

出于您的目的,我会采纳 CMake 的建议并使用方法 1 或方法 2,因为您不想对路径进行硬编码。

关于CMake:选择编译器的正确方法,无需对其路径进行硬编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54327842/

相关文章:

c - 使用堆栈的数组实现

windows - C :\Users\' is not recognized as an internal or external command compiling opencv for QT

带有 Rcpp 和 CMake 的 R 包(Windows)

ubuntu - 使用cmake的libhand库编译错误

cmake - 带有 '#'的Clang诊断标志导致生成错误

c - Head First C(geo2jason 工具)

c++ - ASM 堆栈使用

linux - 如何使用 gcc/cmake 在 64 位 linux 机器上编译 32 位二进制文​​件

c - 对主 ld 的 undefined reference

c++ - 如何将 UTF-8 字符串的一部分解析为 C++ 字符串?