c++ - 包括 CMake 项目库
问题描述
我正在第一次使用 CMake 组合一个小型 c++ 项目。我目前的项目结构是
├── bch
│ ├── CMakeLists.txt
│ ├── gf
│ │ ├── CMakeLists.txt
│ │ ├── include
│ │ │ └── gf.h
│ │ └── src
│ │ └── gf.cpp
│ ├── include
│ │ └── bch.h
│ └── src
│ └── bch.cpp
├── bsc
│ ├── CMakeLists.txt
│ ├── include
│ │ └── bsc.h
│ └── src
│ └── bsc.cpp
├── CMakeLists.txt
├── .gitignore
└── main.cpp
目前我有gf
一个子目录bch
。的内容bch/CMakeLists
是
cmake_minimum_required(VERSION 3.17)
project(bch VERSION 0.1.0)
# Targets
add_library(bch STATIC src/bch.cpp)
# Dependant
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/gf)
target_link_libraries(bch PUBLIC gf)
# Export to dependants
target_include_directories(bch PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)
我想将gf
CMake 项目放在bch
. add_subdirectory
除非我遗漏了什么,否则在使用该命令时这似乎不是受支持的结构。一般来说,实现我将目录结构与依赖树分离的目标的当前“最佳实践”是什么?
解决方案
如果您想将项目与依赖项分离,那么我建议将 cmake 项目分成两个单独的项目,导出依赖目标,然后使用“find_package”导入它。这是该主题的快速谷歌查找: https ://visualgdb.com/tutorials/linux/cmake/find_package
[编辑]
对于更通用的方法,我建议使用 cmake 文档:
https://cmake.org/cmake/help/latest/command/find_package.html#command:find_package
https://cmake.org/cmake/help/latest/module/CMakePackageConfigHelpers.html
https://cmake.org/cmake/help/v3.18/command/install.html#export
这个想法是:
在要生成“*ConfigVersion.cmake”文件的依赖项项目中,使用“install”命令参数中的“EXPORT”安装所有需要的文件(头文件、二进制文件和 *ConfigVersion.cmake)。
在最终项目中使用“find_package”来导入依赖项。
对于更大的库项目,我还建议使用命名空间来允许仅导入库的选定部分。
推荐阅读
- javascript - How to access and sort keys in nested objects in Javascript?
- sql - SQL ,将所有数字格式化为 2 位小数(例如 20 到 20.00)
- rethinkdb - 让 RethinkDB 查询在 Ruby on Rails 中工作
- javascript - 使用 React 和 CSS 关闭屏幕时淡出动画
- node.js - React-Native to NodeJS Server - 将客户端流(视频)从 React 发送到 NodeJS 服务器,然后再次发送回客户端
- java - JAXB ordering multiple properties
- grammar - 这种从 BNF 到 EBNF 的转换是否正确?
- wordpress - Wordpress 媒体上传定义默认元值
- c# - 如何在容器中注册类型,但在子容器中解析?
- flutter - Flutter 中带有容器小部件的 If 语句