- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
有些实用程序通过添加命令作为前缀来使用现有编译器(因此,您可以调用 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 3.4.0有一个CMAKE_<LANG>_COMPILER_LAUNCHER变量和对应的目标属性<LANG>_COMPILER_LAUNCHER .因此,如果您的项目是纯 C 语言,您可以执行以下操作:
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(如果可以找到):
#-----------------------------------------------------------------------------
# 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()
关于c++ - 在 CMake 中使用编译器前缀命令(distcc、ccache),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32752446/
很抱歉,标题并没有说明太多,但到目前为止,我不能更具体... 我在网络中有两台 Ubuntu 14.04 计算机(服务器(应该进行编译的是 10.8.1.52),客户端是 10.8。 1.42. 我通
我正在尝试使用 distcc 分发构建使用 clang按以下方式使用 sanitizer :clang++-12 -fsanitize-blacklist=/path/to/the/blacklist
两个简化的 makefile makefile1 a.txt: echo “123144234” > a.txt t2: a.txt cat a.txt > b.txt mak
将 scons 与 distcc 一起使用的正确方法是什么?使用 CC="distcc g++"或 CXX 的明显方法不起作用。 有没有人成功地将两者结合起来? 谢谢! 最佳答案 您是否通过环境变量配
将 scons 与 distcc 一起使用的正确方法是什么?使用 CC="distcc g++"或 CXX 的明显方法不起作用。 有没有人成功地将两者结合起来? 谢谢! 最佳答案 您是否通过环境变量配
在使用 distcc 构建项目时,链接阶段是在本地完成的,而不是像编译那样发送到其他计算机上完成的,这有什么特别的原因吗?阅读 distcc 白页并没有给出明确的答案,但我猜测链接目标文件所花费的时间
背景: 我有一个 128 核服务器,我想将其用作构建服务器。 我有一堆客户端机器,它们与不太新且功能不太强大的 PC 一起工作。 (无法升级!不在我的控制范围内。) 我做了什么: 我关注了 distc
我正在使用普通的 distcc(没有泵模式)来编译我的代码,对于分发到主机的每个文件,打印以下消息: distcc[11543] (dcc_talk_to_include_server) Warnin
我正在尝试让 distcc 在两台机器 CLIENT 和 SERVER 之间工作,我“认为”我已经正确设置了它,但我仍然收到此错误 (dcc_build_somewhere) Warning: fai
Distcc 可以轻松地在多台机器上分发 C 或 C++ 编译作业,并且是处理大型、频繁构建的代码库的天赐之物。 然而,如今越来越多的大型项目是用 Java 构建的。有谁知道 Java 的等价物或类似
有没有像 distcc 这样的 GHC 工具?或者其他更原始的分布式编译技巧? 我意识到 GHC 对版本极其敏感。这是不切实际的,因为 GHC doesn't yet support cross-co
我想用 Raspbian wheezy 的新副本在 Raspberry Pi 上编译 gnuradio。我有一个带有 i7 的 distcc 设置来卸载 RPi 的工作。当我使用 时,它可以很好地处理
我正在尝试编译 USB wifi dongle 的 RaLink 驱动程序。不使用 distcc 一切正常,但如果我使用 distcc 则会出现错误。这里制作日志: make -C UTIL/ cp
我正在尝试为我正在进行的新项目设置一个小型 2 系统 distcc 编译集群,但由于某种原因,我无法让集群中的第二台服务器进行编译。 如果我尝试在所述服务器上运行 arm-eabi-gcc 文件,我会
Xcode 4.2 在首选项中有一个选项卡,用于处理在本地网络中共享编译任务。它使用 bonjour 和 distcc 将编译转移到同一网络上选择了该选项的其他 mac。升级到 Xcode 4.3 后
我为一个小型 C++ 项目安装了 distcc 和 Cmake。我有两台机器:所以有一台在本地完成编译的客户端,还有一台“远程”完成编译的服务器。 我已按照说明安装和配置 distcc,但在使用以下简
我已经使用 distcc 使用 "make -j8 CC=distcc" 命令对几个包进行分布式编译。它工作正常。但是为了通过编译内核源代码来创建 debian 包,我们使用“make-kpkg”命令
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 5 年前。
据我所知,当我将我的任何项目从模拟器切换到设备构建配置时,构建不再是分布式的,而是在本地构建的。 那么,让 Xcode 使用分布式构建机制进行设备构建有什么神奇之处吗?有人对此有明确的说法,甚至有一些
有些实用程序通过添加命令作为前缀来使用现有编译器(因此,您可以调用 cc -c file.c,而不是调用 distcc cc -c file.c)。 使用 CMake 时可以更改编译器命令,但是我在尝
我是一名优秀的程序员,十分优秀!