4
我使用下面的CMake文件來自動下載和編譯Boost庫。在爲我的編譯器生成項目文件後,我運行cmake --build . --config Debug
和cmake --build . --config Release
來構建兩個變體。所以我啓動了兩次構建過程。即使CMake非常聰明,如果校驗和仍然匹配,不會再次下載壓縮文件,它會將其提取到源目錄中兩次。對於大型Boost庫,抽取需要幾分鐘的時間,所以我想阻止CMake在第二次構建時使用它。如何通過CMake的ExternalProject_Add重用提取的源代碼?
ExternalProject_Add(Boost
PREFIX ${BOOST_PREFIX}
TMP_DIR ${BOOST_PREFIX}/temp
STAMP_DIR ${BOOST_PREFIX}/stamp
#--Download step--------------
DOWNLOAD_DIR ${BOOST_PREFIX}/download
URL http://downloads.sourceforge.net/project/boost/boost/1.56.0/boost_1_56_0.tar.gz
URL_MD5 8c54705c424513fa2be0042696a3a162
#--Update/Patch step----------
UPDATE_COMMAND ""
#--Configure step-------------
SOURCE_DIR ${BOOST_PREFIX}/source
CONFIGURE_COMMAND ${BOOST_CONFIGURE_COMMAND}
#--Build step-----------------
BUILD_COMMAND ${BOOST_BUILD_EXECUTABLE} install
--build-dir=${BOOST_PREFIX}/build
--prefix=${BOOST_PREFIX}/install
variant=${BOOST_VARIANT}
link=${BOOST_LINK}
threading=multi
address-model=32
toolset=${BOOST_TOOLSET}
runtime-link=${BOOST_RUNTIME_LINK}
BUILD_IN_SOURCE 1
#--Install step---------------
INSTALL_COMMAND ""
)
在它會可能這個particually例如只使用variant=debug,release
,但在我的項目的一些其他的外部依賴性,我建立這種方式。我如何才能讓CMake只下載一個新的壓縮文件?
您可以創建第二個'ExternalProject_Add'空'DOWNLOAD_COMMAND'並添加一個依賴於第一'ExternalProject_Add'。兩個項目的SOURCE_DIR必須相同。見[示例](https://github.com/ruslo/hunter/blob/master/cmake/schemes/url_sha1_release_debug.cmake.in)。 – 2014-10-21 09:41:09
@ruslo很好,這個工程。你能否發表評論作爲答案,以便我能接受它? – danijar 2014-11-29 23:34:43