Cmake 如果源更改,则重新生成ExternalProject
我有一个外部项目:Cmake 如果源更改,则重新生成ExternalProject,cmake,Cmake,我有一个外部项目: ExternalProject_Add( lighttpd URL "${PROJECT_SOURCE_DIR}/ext/lighttpd/lighttpd.tar.gz" SOURCE_DIR "${EXTERNAL_INSTALL_PATH}/lighttpd" ) ExternalProject_Add_Step( lighttpd copy2build COMMAND cp -a ${EXTERNAL_INSTALL_PATH
ExternalProject_Add(
lighttpd
URL "${PROJECT_SOURCE_DIR}/ext/lighttpd/lighttpd.tar.gz"
SOURCE_DIR "${EXTERNAL_INSTALL_PATH}/lighttpd"
)
ExternalProject_Add_Step(
lighttpd copy2build
COMMAND cp -a ${EXTERNAL_INSTALL_PATH}/lighttpd/bin/. ${EXECUTABLE_OUTPUT_PATH}
COMMAND cp -a ${EXTERNAL_INSTALL_PATH}/lighttpd/lib/. ${LIBRARY_OUTPUT_PATH}
DEPENDEES install
)
问题是,如果
lighttpd.tar.gz
发生更改,则CMake不会重建lighttpd
。如果lighttpd.tar.gz
发生变化,我如何告诉CMake重建这个外部项目?这是一个有趣的问题,我认为ExternalProject\u Add
本身并不能解决这个问题
请注意,
ExternalProject\u Add\u Step
有一个选项ALWAYS
,您可以将其设置为1
或0
。我们将在下面的变通方法/解决方案中使用它
您可以使用以下公式计算文件的哈希值:
file(<MD5|SHA1|SHA224|SHA256|SHA384|SHA512> filename file_hash)
然后,您可以比较这两个变量,如果它们相同,则将
ExternalProject\u Add\u Step
的ALWAYS
选项设置为1
,否则,将其设置为0ExternalProject\u Add\u Step
也有一个dependens
选项,允许我指定tar.gz
。然而,这只会导致CMake在tar.gz
发生任何更改时(而不是进行纠正和重建)将旧的lighttpd重新复制到/build/bin
。有没有办法将untar/build步骤分解为Add_步骤
s?@RPGillespie抱歉,我不确定。对于CMake邮件列表来说,这是一个很好的问题。
set(TAR_BALL_HASH ${file_hash} CACHE INTERNAL "")