【发布时间】:2014-12-14 15:25:55
【问题描述】:
我使用以下 CMake 文件来自动下载和编译 Boost 库。在为我的编译器生成项目文件后,我运行cmake --build . --config Debug 和cmake --build . --config Release 来构建这两个变体。所以我两次调用构建过程。即使 CMake 足够聪明,如果校验和仍然匹配,就不会再次下载存档,它也会将其两次提取到源目录中。大型 Boost 库的提取需要几分钟时间,所以我想阻止 CMake 在第二次构建时执行此操作。
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 ""
)
在这个特别的例子中,可以只使用variant=debug,release,但是我的项目中还有一些其他的外部依赖项是我以这种方式构建的。如何让 CMake 仅在下载新存档时才提取存档?
【问题讨论】:
-
您可以使用空的
DOWNLOAD_COMMAND创建第二个ExternalProject_Add,并将依赖项添加到第一个ExternalProject_Add。两个项目的SOURCE_DIR必须相同。见example。 -
@ruslo 太好了,这行得通。您能否发表评论作为答案,以便我接受?
标签: cmake dependencies cross-compiling stamp