【发布时间】:2019-10-03 17:37:34
【问题描述】:
我想使用以下第三方库: https://github.com/Corvusoft/restbed
我想创建一个类似这样的文件夹结构:
- root
- CMakeLists.txt
- src
- third_party
- restbed
- src
- CMakeLists.txt
- CMakeLists.txt
我发现我应该使用ExternalProject CMake 模块来实现这一点,但似乎我不能正确地做到这一点。由于某种原因,当我使用根 CMakeLists.txt 生成外部库(restbed)源时,它不会出现在我的 XCode 项目中。此根 CMakeLists.txt 包含在 third_party 文件夹的 CMakeLists.txt 中。 third_party 文件夹的 CMakeLists.txt 如下所示:
include(ExternalProject)
# CMAKE_CURRENT_LIST_DIR -> third_party folder
set(RESTBED_DIR ${CMAKE_CURRENT_LIST_DIR}/restbed)
ExternalProject_Add(restbed
PREFIX ${RESTBED_DIR}
SOURCE_DIR ${RESTBED_DIR}
CMAKE_ARGS -DBUILD_SSL=NO
DOWNLOAD_COMMAND ""
UPDATE_COMMAND ""
BUILD_COMMAND cmake ..
BINARY_DIR ${RESTBED_DIR}/build
INSTALL_DIR ${RESTBED_DIR}/distribution
INSTALL_COMMAND make install
)
set(RESTBED_INCLUDE_DIR ${RESTBED_DIR}/distribution/include)
set(RESTBED_LIB_DIR ${RESTBED_DIR}/distribution/lib)
add_library(librestbed IMPORTED STATIC)
add_dependencies(librestbed restbed)
在此之后,我想使用 target_include_dir 和 target_link_libraries 将 librestbed 添加为我的根项目的依赖项。在此之后,当我构建我的 XCode 项目时,没有任何反应,外部库将不会被构建。我究竟做错了什么?我不想使用内置的 CMake git 功能,因为我想将我的外部依赖项作为 git 子模块存储在第三方库中。我宁愿不让 CMake 弄清楚它是否需要重新下载给定的依赖项。提前致谢!
【问题讨论】:
-
我认为你需要的cmake命令是'add_subdirectory'
-
我认为这是不同的,因为它将它作为我项目的一部分而不是外部项目添加