我想使用以下第三方库:https://github.com/Corvusoft/restbed
我想创建一个类似于此的文件夹结构:
- root
- CMakeLists.txt
- src
- third_party
- restbed
- src
- CMakeLists.txt
- CMakeLists.txt我发现我应该使用ExternalProject CMake模块来实现这一点,但是我似乎不能正确地做到这一点。由于某种原因,当我使用根XCode生成外部库(Restbed)源代码时,它不会出现在我的CMakeLists.txt项目中。此根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功能,因为我希望将外部依赖项存储为third_party库中的git子模块。我不想让CMake知道它是否需要重新下载一个给定的依赖项。提前感谢!
发布于 2019-10-03 18:27:44
我认为您混淆了BUILD_COMMAND选项和CONFIGURE_COMMAND选项。cmake ..应该放在选项CONFIGURE_COMMAND之后。
ExternalProject_Add(restbed
PREFIX ${RESTBED_DIR}
SOURCE_DIR ${RESTBED_DIR}
CMAKE_ARGS -DBUILD_SSL=NO
DOWNLOAD_COMMAND ""
UPDATE_COMMAND ""
CONFIGURE_COMMAND cmake ..
BINARY_DIR ${RESTBED_DIR}/build
INSTALL_DIR ${RESTBED_DIR}/distribution
INSTALL_COMMAND make install
)根据文档,每个命令都有缺省值,因此您可能根本不需要指定CONFIGURE_COMMAND。例如,对于BUILD_COMMAND
如果未给出此选项,则将选择默认的build命令以最适当的方式与主构建集成(例如,如果项目使用
make生成,则使用递归CMake用于Makefile生成器或CMake)。
此外,如果确实指定了CONFIGURE_COMMAND,则可能会展开传递它的参数,如下所示:
...
CONFIGURE_COMMAND cd restbed && mkdir build && cd build && cmake ..
...https://stackoverflow.com/questions/58224276
复制相似问题