gpt4 book ai didi

cmake - 如何使用 CMake 的 ExternalProject_Add 重用提取的源代码?

转载 作者:行者123 更新时间:2023-12-01 00:57:26 41 4
gpt4 key购买 nike

我使用以下 CMake 文件自动下载和编译 Boost 库。为我的编译器生成项目文件后,我运行 cmake --build . --config Debugcmake --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 下载了一个新的存档,我怎样才能让 CMake 只提取存档?

最佳答案

创建两个项目:Foo-ReleaseFoo-Debug .离开 DOWNLOAD_COMMAND第二个项目为空,并使其依赖于第一个。套装SOURCE_DIR两个项目的explicilty(指向同一个目录)。 IE。:

set(source_dir "${CMAKE_CURRENT_BINARY_DIR}/3rdParty/Foo/Source")

ExternalProject_Add(
Foo-Release
URL "..."
URL_HASH SHA1=...
SOURCE_DIR "${source_dir}"
...
)

ExternalProject_Add(
Foo-Debug
DOWNLOAD_COMMAND
""
SOURCE_DIR "${source_dir}"
...
)

add_dependencies(Foo-Debug Foo-Release)
  • Example
  • 关于cmake - 如何使用 CMake 的 ExternalProject_Add 重用提取的源代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26452225/

    41 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com