2017-07-08 101 views
0

如何设置外部项目来下载不是.tgz文件的链接?cmake ExternalProject_Add如何下载URL非tar文件?

例如,Catch提供了一个单一标题分发版。我想只是下载这个而不是git repo或.tgz版本。但我还没有想出如何告诉CMake做到这一点。

我想这样做:

Include(ExternalProject) 
ExternalProject_Add(
    catch 
    PREFIX ${CMAKE_BINARY_DIR}/catch 
    URL https://github.com/philsquared/Catch/releases/download/v1.9.6/catch.hpp ${CMAKE_BINARY_DIR}/catch 
    CONFIGURE_COMMAND "" 
    BUILD_COMMAND "" 
    INSTALL_COMMAND "" 
    LOG_DOWNLOAD ON 
) 

为URL假定URL是一个压缩的tar文件,就会失败。我尝试了各种各样的DOWNLOAD_COMMAND而没有任何成功。

回答

2

使用DOWNLOAD_NO_EXTRACT选项ExternalProject_Add

只需下载该文件,并且不提取它;下载文件的完整路径为<DOWNLOADED_FILE>。

代码示例:

ExternalProject_Add(
    catch 
    PREFIX ${CMAKE_BINARY_DIR}/catch 
    URL https://github.com/philsquared/Catch/releases/download/v1.9.6/catch.hpp 
    DOWNLOAD_NO_EXTRACT 
    CONFIGURE_COMMAND "" 
    BUILD_COMMAND "" 
    INSTALL_COMMAND "" 
    ) 

文件就会被下载到<prefix>/src目录。


如果使用LOG_DOWNLOAD选项一起使用DOWNLOAD_NO_EXTRACT,你需要CMake的3.9正常工作。看到这些bugreports:https://gitlab.kitware.com/cmake/cmake/issues/16544,https://gitlab.kitware.com/cmake/cmake/issues/17046

+0

谢谢。这正是我正在寻找的。还要感谢关于LOG_DOWNLOAD的提示。该文件正在下载罚款。但是,CMake在下载后失败,直到我关闭了LOG_DOWNLOAD。我甚至使用CMakeLists 3.8.2。所以看起来它可能会再次被打破。 – Tal

+0

我刚刚打开此问题:https://gitlab.kitware.com/cmake/cmake/issues/17046。 – Tal

+1

关于CMake问题的后续处理。这在CMake 3.9中得到了修复,并且已经被修补到3.8树中,所以如果还有另一个3.8版本(即3.8.3),它也应该在那里修复。欲了解更多信息:https://gitlab.kitware.com/cmake/cmake/issues/17046#note_289032 – Tal