DistCC和CMake-运行make时在本地构建和分布式构建之间进行选择



我的项目使用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技巧?

我们使用以下内容来允许接通和断开-Werror标志的接通时间(而不是cmake时间)。

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

将警告作为错误打开。

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

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

然后运行任一

make USE_DISTCC=distcc

或者只是

make

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

SET(CMAKE_C_COMPILER "my-gcc-script")

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

相关内容

  • 没有找到相关文章

最新更新