我遇到了一个编译作业分发工具discc的问题,其中(cmake
(构建未分发到其他指定系统(如~/.distcc/host
中所定义(。
我这样配置构建系统:
cmake -DCMAKE_C_COMPILER_LAUNCHER=distcc -DCMAKE_CXX_COMPILER_LAUNCHER=distcc [...]
对于其他(类似的(构建,distcc
运行良好,因此配置正确。
可能是什么问题?
事实证明distcc
拒绝使用march=native
编译选项。这当然是有道理的,因为可以组合具有混合优化标志的二进制文件。
只是为了让您知道,如果您有一个使用march=native
的构建系统,如cmake
指令:
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-march=native" COMPILER_SUPPORTS_MARCH_NATIVE)
if(COMPILER_SUPPORTS_MARCH_NATIVE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
endif()
您必须禁用它,才能将distcc
与从属设备一起使用。您必须手动指定体系结构标志。
或者,尝试检测distcc
:的使用
include(CheckCXXCompilerFlag)
STRING(FIND "${CMAKE_CXX_COMPILER_LAUNCHER}" "distcc" found)
if (${found} LESS 0)
message(STATUS "trying to use -march=native")
CHECK_CXX_COMPILER_FLAG("-march=native" COMPILER_SUPPORTS_MARCH_NATIVE)
if(COMPILER_SUPPORTS_MARCH_NATIVE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
endif()
else()
message(STATUS "detected 'distcc' build, hence not using -march=native")
endif()
要想成功,请确保将distcc
与相应的cmake
编译器启动工具一起使用:
cmake -DCMAKE_C_COMPILER_LAUNCHER=distcc -DCMAKE_CXX_COMPILER_LAUNCHER=distcc [...]