Я использую следующий файл 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 ""
)
В этом 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). –
@ruslo Отлично, это работает. Не могли бы вы высказать свои комментарии в качестве ответа, чтобы я мог принять его, пожалуйста? – danijar