CMake:在ExternalProject_Add中下载并解压缩多个文件

时间:2019-07-04 11:51:36

标签: cmake external-project

我想使用CMake的ExternalProject功能在Windows上自动编译OpenSSL。在配置中,我可以指定一个下载URL。但是,我需要将多个其他文件解压缩到同一源目录中。所以这是目的:

ExternalProject_Add ( ${CMAKE_PROJECT_NAME}    
    PREFIX              ${CMAKE_COMPILE_ROOT}/3rd/${CMAKE_PROJECT_NAME}
    URL                 //sw-storage/3rd/src/${OPENSSL_NAME}/jom.zip
    URL                 //sw-storage/3rd/src/${OPENSSL_NAME}/nasm-2.14.02-win64.zip
    URL                 //sw-storage/3rd/src/${OPENSSL_NAME}/strawberry-perl-5.30.0.1-64bit.zip
    URL                 //sw-storage/3rd/src/${OPENSSL_NAME}/openssl-1.1.1c.tar.gz
    CONFIGURE_COMMAND   perl Configure VC-WIN64A no-idea no-mdc2 no-rc5 --prefix=${INSTALL_DIR} --openssldir=${INSTALL_DIR}/ssl
    BUILD_IN_SOURCE     1
    BUILD_COMMAND       jom.exe
    INSTALL_COMMAND     jom.exe install

这似乎是不可能的。指定多个URL条目会导致以下错误消息:

CMake Error at C:/build/cmake-3.13.4/share/cmake-3.13/Modules/ExternalProject.cmake:2455 (message): 
At least one entry of URL is a path (invalid in a list)

在CMake中可以做到这一点吗?

1 个答案:

答案 0 :(得分:1)

CMake文档指出,当指定多个URL时,它们是彼此的后备。

外部项目源的路径和/或URL列表。什么时候 给出了多个URL,然后依次尝试直到成功。

URL_HASH仅指定一次,因此CMake希望所有URL都指向同一文件。

在这种情况下,您将需要单个项目,并使用ExternalProject的DEPENDS选项来控制依赖项,或者尝试其中的任何CMake based OpenSSL builds,将其添加到ExternalProject中,并检查它们是否已经处理了依赖项