2015-10-16 93 views
4

我试图使用ExternalProject_add在Linux上使用CMake构建一些外部项目。然而,他们不尊重make -j12命令,并提出警告:当使用CMake构建外部项目时,jobserver不可用

‘warning: jobserver unavailable: using -j1. Add `+' to parent make rule.’ 

这痛苦减慢我的身材。有没有办法同时建立外部项目?下面是一个例子项目:

include(ExternalProject) 
    ExternalProject_Add(
     ${TARGET_NAME}-ext 
     URL ${CMAKE_CURRENT_SOURCE_DIR}/xerces-c-${VERSION_XERCESC}.tar.gz 
     DOWNLOAD_DIR ${XERCESC_DIR} 
     SOURCE_DIR ${XERCESC_DIR}/src 
     PATCH_COMMAND chmod guo+rw ${CMAKE_CURRENT_SOURCE_DIR} -R 
     CONFIGURE_COMMAND ./configure --prefix=${XERCESC_DIR} --disable-shared -q --disable-network --enable-transcoder-gnuiconv --enable-msgloader-inmemory 
     BUILD_COMMAND make --silent 
     INSTALL_COMMAND make install 
     BUILD_IN_SOURCE 1 
    ) 

回答

9

为了让make命令正确传递给孩子,你需要使用$(MAKE)用括号(没有大括号),而不是让为你的命令,即

BUILD_COMMAND $(MAKE) --silent 
INSTALL_COMMAND $(MAKE) install 

这从CMake 2.8.4版本开始支持。

+0

太棒了!请接受您自己的答案,然后问题不再显示为“需要答案”。 – usr1234567

+0

这工作,但不是便携式。我使用'cmake --build '但我得到了jobserver警告。 –

+0

@pawetbylica我想这意味着这将被包装在特定于操作系统的构建语句中。根据我的经验,大多数外部项目更容易定义。这只是一个Linux解决方法。 –

相关问题