2015-10-16 425 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解決方法。 –

相關問題