【发布时间】:2015-09-24 02:36:19
【问题描述】:
有些实用程序通过添加命令作为前缀来使用现有编译器(因此,您可以调用distcc cc -c file.c,而不是调用distcc cc -c file.c)。
使用 CMake 时,可以更改编译器命令,但是我在尝试使用 distcc 时遇到了问题,尽管这可能适用于编译器的任何命令前缀(ccache 也一样)。
-
CMake 期望编译器是绝对路径,
因此将CMAKE_C_COMPILER设置为/usr/bin/distcc /usr/bin/cc,会产生错误:/usr/bin/distcc /usr/bin/cc is not a full path to an existing compiler tool. - 将编译器设置为
/usr/bin/distcc和CMAKE_C_COMPILER_ARG1或CMAKE_C_FLAGS以/usr/bin/cc开头在某些情况下有效,但在CHECK_C_SOURCE_COMPILES时失败
(检查是否有支持这一点的方法,即使前缀CMAKE_REQUIRED_FLAGS也不起作用)。
我发现这样做的唯一方法是将命令包装在 shell 脚本中。
#!/bin/sh
exec /usr/bin/distcc /usr/bin/cc "$@"
虽然这可行,但如果能够在 CMake 中使用编译器帮助程序,而不必通过 shell 脚本(当构建系统可以只使用命令前缀时会产生一些小开销),那就太好了。
所以我的问题是:
CMake 是否可以直接使用编译器前缀命令(如 distcc)?无需 shell 脚本包装器?
【问题讨论】:
-
在调用 cmake 时设置
CC/CXX环境变量是否因某种原因不足(例如CC="distcc gcc" cmake ..)? -
@Iskar Jarak,这行得通! (所以我想这可能是答案)。有趣的是,在内部它使用
CMAKE_C_COMPILER作为第一个命令,CMAKE_C_COMPILER_ARG1作为第二个命令。我不确定发生了什么 - 因为我已经尝试在 cmake-gui 中设置这些,而CMAKE_C_COMPILER_ARG1被CHECK_C_SOURCE_COMPILES忽略。 -
很高兴它有效。设置环境变量可能还会设置其他一些东西,
CHECK_C_SOURCE_COMPILES使用的东西......虽然我不是 100% 什么......这就是为什么在 CMake 中弄乱单个变量是一件令人头疼的事情。