我正在尝试使用restbed进行HTTP处理,以C ++编写Web服务(我是该语言的新手)。这两个项目似乎都在使用cmake进行构建配置和依赖关系管理,因此我认为我也会这样做。但是我对如何处理感到困惑。
这是我的最小CMakeLists.txt
cmake_minimum_required(VERSION 3.7)
project(WebService)
set (WebService_VERSION_MAJOR 1)
set (WebService_VERSION_MAJOR 0)
set(CMAKE_CXX_STANDARD 11)
add_executable(${PROJECT_NAME} main.cpp)
我知道有几种方法可以在cmake中添加依赖项。我曾尝试做过诸如find_package(restbed)之类的事情,但是显然它不知道在哪里可以找到我想要的软件包,并且一直在要求额外的cmake文件来提供帮助。我不确定应该在哪里找到这些。我应该自己写一个吗?
我尝试使用ExternalProject_Add指令。我添加了以下内容。
ExternalProject_Add(
restbed
GIT_REPOSITORY "git@github.com:Corvusoft/restbed.git"
SOURCE_DIR "${CMAKE_SOURCE_DIR}/deps/restbed"
CMAKE_ARGS -DBUILD_SSL=OFF
)
set (restbed_INCLUDE ${CMAKE_SOURCE_DIR}/deps/restbed/distribution/include/)
set (restbed_LIB ${CMAKE_SOURCE_DIR}/deps/restbed/distribution/library/librestbed.a)
add_dependencies(${PROJECT_NAME} restbed)
include_directories(${restbed_INCLUDE})
target_link_libraries(${PROJECT_NAME} ${restbed_LIB})
我遇到的问题是,显然,用于建立外部项目的所有步骤都是在构建过程中执行的,而不是在cmake配置过程中执行的。这意味着每次我运行make
时,每个外部项目都会重建并重新安装所有内容。我的服务很小,这似乎很浪费。
是否有更好的方式处理依赖关系?有没有比cmake更简单的工具? C ++是否有类似于Rust的货物或Haskell的堆栈的东西?