c++ - 如何让 CMake 安装我的目标所依赖的外部项目?
问题描述
我正在开发一个应用程序并将一些功能分离到第二个存储库中。我想要
- 使库 repo 成为 git 子模块,因为两者将并行开发
- 将库作为依赖项包含在我的 CMakeLists 中,而无需在系统范围内安装它。
所以我有这样的布局:
. CMakeLists.txt
|_ src
|_ include
|_ third_party
|_ my_library
|_ CMakeLists.txt
|_ src
|_ include
现在CMakeLists.txt
inmy_library
创建了一些带有 的库add_library()
,并且它还有一个install
复制libmy_library.a
到的目标my_library/lib
。
我想在我的顶层依赖这个库CMakeLists.txt
。因此,在我尝试为自己的目标引用库之前,我my_library
需要构建和安装CMake 项目。我尝试ExternalProject_Add()
这样使用:
./CMakeLists.txt
set(MY_LIB_DIR ${CMAKE_SOURCE_DIR}/third_party/my_library)
ExternalProject_Add(my_library
SOURCE_DIR ${MY_LIB_DIR}
UPDATE_DISCONNECTED TRUE
BUILD_IN_SOURCE FALSE
BINARY_DIR ${MY_LIB_DIR}/build
)
list(APPEND CMAKE_PREFIX_PATH ${MY_LIB_DIR}/lib)
# find compiled lib
find_library(MY_LIB_LIBRARY my_library)
add_executable(main ${SOURCES})
add_dependencies(main my_library)
target_link_libraries(main ${MY_LIB_LIBRARY})
但是,这不起作用,因为在 cmake 读取配置时,libmy_library.a
尚未构建。
因此问题是:如何让 CMake 构建和安装外部项目,以便我可以将安装工件列为依赖项?
有人建议这是重复的,但链接的答案在当前项目中构建了外部项目,我认为这是不可取的。
解决方案
推荐阅读
- javascript - Query specific day in Firestore
- c++ - Factoring out repeated constructor calls in template-builder pattern
- android - 在 android studio 中更新 android 项目后,我的 gradle 构建没有运行
- python - The `*` in `sorted(iterable, *, key=None, reverse=False)`
- php - convert gd resource type to stream image string context
- javascript - 曲线路径的 Svg 动画
- powershell-3.0 - Powershell 脚本文件未从 InstallShield CustomAction 执行
- angular - Angular 6将查询参数传递给根
- r - xyplot添加数据框线#上面的点
- angular - 如何以这种格式将文档上传到 AWS S3 domain_name/my_bucket_name/my_folder_name