cmake:下载easylogging++,直接使用源码
Posted
技术标签:
【中文标题】cmake:下载easylogging++,直接使用源码【英文标题】:cmake: Download easylogging++ and use sources directly 【发布时间】:2018-04-17 04:26:27 【问题描述】:我想下载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
。
【问题讨论】:
【参考方案1】: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 .
step 除非必要,否则不会下载。
【讨论】:
以上是关于cmake:下载easylogging++,直接使用源码的主要内容,如果未能解决你的问题,请参考以下文章
使用 easylogging++ 记录 QString 时插入的额外空间
是否可以通过与 easylogging++ 相同的方式链接重载插入运算符来创建一个模仿 std::cout 语法的 C++ 类?