首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在CMake (distcc,ccache)中使用编译器前缀命令

在CMake (distcc,ccache)中使用编译器前缀命令
EN

Stack Overflow用户
提问于 2015-09-24 02:36:19
回答 1查看 11.6K关注 0票数 18

有些实用程序通过添加命令作为前缀来使用现有编译器(因此,您可以调用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/distccCMAKE_C_COMPILER_ARG1CMAKE_C_FLAGS/usr/bin/cc开始在某些情况下有效,但在CHECK_C_SOURCE_COMPILES中失败 (检查是否有某种方式支持这一点,甚至前缀CMAKE_REQUIRED_FLAGS也不起作用)。

我发现这样做的唯一方法是将命令包装在shell脚本中。

代码语言:javascript
复制
#!/bin/sh
exec /usr/bin/distcc /usr/bin/cc "$@"

虽然这是可行的,但是能够在CMake中使用编译器帮助器是件好事,而不必通过shell脚本(当构建系统只需要使用命令前缀时,就会产生一些小的开销)。

所以我的问题是:

CMake可以直接使用编译器前缀命令(例如distcc)吗?没有shell脚本包装器?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-16 16:49:06

CMake 3.4.0开始,就有了一个发射装置变量和相应的目标属性发射装置。因此,如果您的项目是C-只有您会做一些事情,如:

代码语言:javascript
复制
cmake -DCMAKE_C_COMPILER_LAUNCHER=ccache /path/to/source
CCACHE_PREFIX=distcc make -j`distcc -j`

如果您有一个C++项目,请使用-DCMAKE_CXX_COMPILER_LAUNCHER=ccache

或者,让您的CMakeLists.txt智能,如果可以找到它,可以自动使用ccache:

代码语言:javascript
复制
#-----------------------------------------------------------------------------
# Enable ccache if not already enabled by symlink masquerading and if no other
# CMake compiler launchers are already defined
#-----------------------------------------------------------------------------
find_program(CCACHE_EXECUTABLE ccache)
mark_as_advanced(CCACHE_EXECUTABLE)
if(CCACHE_EXECUTABLE)
  foreach(LANG C CXX)
    if(NOT DEFINED CMAKE_${LANG}_COMPILER_LAUNCHER AND NOT CMAKE_${LANG}_COMPILER MATCHES ".*/ccache")
      message(STATUS "Enabling ccache for ${LANG}")
      set(CMAKE_${LANG}_COMPILER_LAUNCHER ${CCACHE_EXECUTABLE} CACHE STRING "")
    endif()
  endforeach()
endif()
票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32752446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档