1

CMake の ExternalProject 機能を使用して、Windows で OpenSSL を自動的にコンパイルしたいと考えています。構成では、1 つのダウンロード 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 でこれを行う方法はありますか?

4

1 に答える 1

1

CMake のドキュメントには、複数の URL が指定されている場合、それらは互いのフォールバックであると記載されています。

外部プロジェクトのソースのパスや URL のリスト。複数の URL が指定されている場合は、いずれかが成功するまで順番に試行されます。

URL_HASH は 1 回だけ指定されるため、CMake はすべての URL が同じファイルを指していると想定します。

この場合、個々のプロジェクトと、ExternalProject の DEPENDS オプションを使用して依存関係を制御するか、そこにあるCMake ベースの OpenSSL ビルドのいずれかを試して、ExternalProject で追加し、依存関係が既に処理されているかどうかを確認する必要があります。

于 2020-08-08T11:33:03.063 に答える