我有一个外部项目:
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
发生更改,则CMake不会重建lighttpd.tar.gz
。如果lighttpd.tar.gz
更改,我如何告诉CMake重建此外部项目?
答案 0 :(得分:1)
这是一个有趣的问题,我不认为ExternalProject_Add
由它自己解决。
请注意,ExternalProject_Add_Step
有一个ALWAYS
选项,您可以将其设置为1
或0
。我们将在以下解决方法/解决方案中使用它。
您可以使用以下方法计算文件的哈希值:
file(<MD5|SHA1|SHA224|SHA256|SHA384|SHA512> filename file_hash)
然后,您可以将此variable
保存为内部缓存变量
set(TAR_BALL_HASH ${file_hash} CACHE INTERNAL "")
然后,您可以比较两个变量,如果它们相同,请将ALWAYS
的{{1}}选项设置为ExternalProject_Add_Step
,否则将其设置为1
。