Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cmake 如果源更改,则重新生成ExternalProject_Cmake - Fatal编程技术网

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
,否则,将其设置为
0

ExternalProject\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 "")