如果源更改,则重建ExternalProject

时间:2018-04-06 21:15:38

标签: 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}/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重建此外部项目?

1 个答案:

答案 0 :(得分:1)

这是一个有趣的问题,我不认为ExternalProject_Add由它自己解决。

请注意,ExternalProject_Add_Step有一个ALWAYS选项,您可以将其设置为10。我们将在以下解决方法/解决方案中使用它。

您可以使用以下方法计算文件的哈希值:

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