1

我想下载easylogging++包,提取内容,然后在我的源代码中直接使用easylogging++.h和easylogging++.cc。

我从这个开始:

ExternalProject_Add(
        easyloggingpp
        PREFIX ${CMAKE_CURRENT_SOURCE_DIR}/downloads
        URL https://github.com/muflihun/easyloggingpp/archive/v9.96.4.tar.gz
        INSTALL_COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/external/easyloggingpp && cp src/easyloggingpp-9.96.4/src/* ${CMAKE_CURRENT_BINARY_DIR}/external/easyloggingpp/)
include_directories(${CMAKE_CURRENT_BINARY_DIR}/external/easyloggingpp) 
set(easylogging ${CMAKE_CURRENT_BINARY_DIR}/external/easyloggingpp/easylogging++.cc)

..

add_dependencies(myproject easyloggingpp)

这会downloads/在我的项目中创建目录,但它是空的,目录中没有文件出现external/,甚至目录本身也没有创建。

我怎样才能实现下载这个包并直接将它的源与我的合并?我想实现类似于bazel的东西new_http_archive

4

1 回答 1

0

似乎 ExternalProject_Add 不适合我试图实现的用例。看起来下载仅在编译步骤期间执行,而不是配置步骤。真可惜。

通过手动编码,我能够获得类似的结果,并且效果很好:

file(MAKE_DIRECTORY downloads external)

################################################################################
# Easylogging++
################################################################################
if(EXISTS "external/easyloggingpp")
else()
file(MAKE_DIRECTORY external/easyloggingpp)
file(DOWNLOAD
        https://github.com/muflihun/easyloggingpp/archive/v9.96.4.zip
        downloads/easyloggingpp.zip)
execute_process(COMMAND unzip downloads/easyloggingpp.zip -d downloads)
file(GLOB easyloggingpp_files downloads/easyloggingpp-9.96.4/src/easylogging++.*)
file(COPY ${easyloggingpp_files} DESTINATION external/easyloggingpp)
endif()

include_directories(external/easyloggingpp)
set(easyloggingpp external/easyloggingpp/easylogging++.cc)

这对我来说非常有效,而且我完全理解在这个过程中发生了什么。很酷的事情是,cmake .除非必要,否则不会下载该步骤。

于 2018-04-22T19:41:19.890 回答