7

我的项目是使用 CMake 构建的,并使用 DistCC + GCC 编译。

我将编译器配置如下:

SET(CMAKE_C_COMPILER "distcc variation-of-gcc")

要构建项目,我只需运行“ 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 ...

我可以使用 CMake 技巧吗?

4

2 回答 2

7

我们使用以下内容来允许打开和关闭-Werror标志的 make time(而不是 cmake time)。

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()

然后我们运行

make WERROR=-Werror

将警告作为错误打开。

我希望您可以做类似的事情来确定是否使用 distcc 来自 make 变量。像这样:

set(CMAKE_CXX_COMPILE_OBJECT "$(USE_DISTCC) <CMAKE_CXX_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT> -c <SOURCE>")

然后运行

make USE_DISTCC=distcc

要不就

make
于 2016-10-27T14:05:48.763 回答
4

最简单的事情(IMO)是在您的项目中编写一个调用编译器的小脚本,并更改​​您的 CMake 文件以运行该脚本,而不是直接包含编译器的名称:

SET(CMAKE_C_COMPILER "my-gcc-script")

现在您可以让该脚本正常运行 distcc,但(基于环境变量或其他东西)也可以在没有 distcc 的情况下运行。无需更改 CMake 文件中的任何内容。

于 2014-09-07T17:38:29.597 回答