.
+-- MyPack
| +-- Lib1
| | +-- include
| | | +-- Lib1.h
| | +-- src
| | | +-- Lib2.cpp
| | +-- CMakeLists.txt
| +-- Lib2
| | +-- include
| | | +-- Lib2.h
| | +-- src
| | | +-- Lib2.cpp
| | +-- CMakeLists.txt
| +-- CMakeLists.txt
+-- SubProject1
| +-- CMakeLists.txt
+-- SubProject2
| +-- CMakeLists.txt
+-- CMakeLists.txt
字符串
大家好啊。
我是CMake的新手,我正在尝试获得类似下面这样的东西。考虑一下我的C项目的上面的目录树:
我有一个目录(比如说“MyPack”),它包含几个子目录(Lib1、Lib2...),每个子目录都代表一个我编写的C库。
如何设置所有内容以便在其他子项目中编写find_package(MyPack)
?
每个子项目都是一个独立的项目,并且不依赖于其他子项目,而只是依赖于“MyPack”中的库。
1条答案
按热度按时间gorkyyrv1#
您的绘图有点混乱,因为Lib 2后面有一个CMakeLists.txt,它不属于任何文件夹.
在第二种情况下:
顶部目录CMakeLists.txt让你可以访问Lib 1和Lib 2的目标,如果你有这样的东西,你可以在SubProject 1和SubProject 2中使用:
字符串
如果是第一种情况,MyPack仅为Lib 1和Lib 2:
使用find_package(MyPack)意味着你需要创建一个Config文件并install()你的项目:
型
在Lib1/CMakeLists.txt中:
型
在Lib2/CMakeLists.txt中:
型
现在你在MyPackTargets的导出中有了lib 1和lib 2,你也必须安装这个导出。
在上面的任何地方:
型
创建一个文件Config.cmake.in,其中:
型
现在,如果您构建并安装项目MyPack,则来自其他项目的find_package(MyPack)应该会找到它并导入您创建的目标。
以下是一些文档:https://cmake.org/cmake/help/latest/module/CMakePackageConfigHelpers.html
https://blog.kitware.com/cmake-superbuilds-git-submodules/的