您基本上已经自己回答了这个问题:使用另一个构建生成器。Ninja做并行构建购买默认和 CMake 使用它就好了。
include(ExternalProject)
ExternalProject_Add(foobar
[...]
## configure options
# cmake is used by default
#CONFIGURE_COMMAND cmake
# cmake will use the same generator as the main project, unless we override it
CMAKE_GENERATOR Ninja
## build options
BUILD_COMMAND ninja
[...]
)
如果您不想使用其他生成器,请使用make
's 选项。设置MAKEFLAGS
在您的外壳中。在你CMakeLists.txt
做类似的事情:
include(ProcessorCount)
ProcessorCount(N)
if(CMAKE_SYSTEM_NAME MATCHES "Linux|Darwin")
include(ExternalProject)
ExternalProject_Add(foobar
BUILD_COMMAND make -j${N}
)
else()
## do windows stuff
endif()
此外,请记住许多ExternalProject_Add()
选项(包括*_COMMAND
选项)会覆盖合理的默认值。因此,在定义外部项目时,请从小处着手,并根据需要添加选项。
tl;博士
- 定义外部项目时要保持稀疏。根据需要进行构建。
- 使用另一个比“make”更了解并行性的构建生成器
- 如果您想为外部项目使用与主项目不同的 CMake 构建生成器,则必须指定它。