ofe*_*vny 6 c++ gcc makefile cmake distcc
我的项目是使用CMake构建的,并使用DistCC + GCC编译.我按如下方式配置编译器:
SET(CMAKE_C_COMPILER "distcc variation-of-gcc")
Run Code Online (Sandbox Code Playgroud)
要构建项目,我只需运行' cmake '然后' make -jXX '.
虽然distcc确实加速了事情,但我有时想要在不分发的情况下构建 - 我希望它在机器上本地构建.
我知道我可以修改DISTCC_HOSTS只包含localhost - 但这仍然有distcc网络的开销,虽然它比其他机器的开销更快......我也可以通过再次重新运行cmake并使用自定义标志修改CMAKE_C_COMPILER来做到这一点.
但我正在寻找一种方法,只需将标志直接添加到'make'即可.
I.e.
# This will use distcc:
make -jXX ...
# This will run locally:
make LOCAL_BUILD=1 -jX ...
Run Code Online (Sandbox Code Playgroud)
我可以使用CMake技巧吗?有人可以帮忙吗?
谢谢!奥弗
小智 6
我们使用它来允许make-time(而不是cmake time)打开和关闭-Werror标志.
if(CMAKE_GENERATOR STREQUAL "Unix Makefiles")
# TODO: this approach for the WERROR only works with makefiles not Ninja
set(CMAKE_CXX_COMPILE_OBJECT "<CMAKE_CXX_COMPILER> <DEFINES> <INCLUDES> <FLAGS> $(WERROR) -o <OBJECT> -c <SOURCE>")
endif()
Run Code Online (Sandbox Code Playgroud)
然后我们跑
make WERROR=-Werror
Run Code Online (Sandbox Code Playgroud)
打开警告作为错误
我希望你能做类似的事情来决定是否使用来自make变量的distcc.像这样
set(CMAKE_CXX_COMPILE_OBJECT "$(USE_DISTCC) <CMAKE_CXX_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT> -c <SOURCE>")
Run Code Online (Sandbox Code Playgroud)
然后运行
make USE_DISTCC=distcc
Run Code Online (Sandbox Code Playgroud)
要不就
make
Run Code Online (Sandbox Code Playgroud)
最简单的事情 (IMO) 是在项目中编写一个调用编译器的小脚本,并更改 CMake 文件以运行该脚本,而不是直接包含编译器的名称:
SET(CMAKE_C_COMPILER "my-gcc-script")
Run Code Online (Sandbox Code Playgroud)
现在您可以让该脚本正常运行 distcc,但(基于环境变量或其他内容)也可以在没有 distcc 的情况下运行。无需更改 CMake 文件中的任何内容。
| 归档时间: |
|
| 查看次数: |
3589 次 |
| 最近记录: |