我正在尝试让一个基本的 cmake 项目与 2 个子项目(每个都是一个库)一起工作,其中一个依赖于另一个。
因此,我有一个针对 lib1 的独立项目和一个针对 lib2 的独立项目(但这取决于 lib1)。一些 lib2 作者可以,而其他人无法访问 lib1 源代码。如果不需要访问,似乎一个接一个地构建和安装是要走的路。有没有办法使用 cmake 一次性构建它们?目前,我正在尝试使用一个整体项目,libs。
但是,由于这些库是相关的,我想以类似 boost / poco 的方式称呼它们。那是我想写的lib2:
find_package(libs COMPONENTS lib1 REQUIRED)
target_link_libraries(lib2 PUBLIC libs::lib1)
我已经为 lib1 和 lib2 以及 libs 创建了配置文件。但是,我不断收到相同的错误
CMake Error at libs/lib2/CMakeLists.txt:67 (find_package):
By not providing "Findlibs.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "libs", but
CMake did not find one.
Could not find a package configuration file provided by "libs" with any of
the following names:
libsConfig.cmake
libs-config.cmake
Add the installation prefix of "libs" to CMAKE_PREFIX_PATH or set
"libs_DIR" to a directory containing one of the above files. If "libs"
provides a separate development package or SDK, be sure it has been
installed.
我不明白将这些文件放在哪里。它在前缀/等下搜索它们,但在构建这些库时尚未安装。放置 -config.cmake 文件的正确位置是什么?我已经把它们都放进去了
${CMAKE_BINARY_DIR}/libs
这似乎与 Poco 相似,但错误仍然存在。图书馆如何找到彼此?
// 更新:
从评论中我了解到,首先需要构建 lib1 才能使用 find_package。有没有办法(在cmake中)
- 构建 lib1,安装它,构建 lib2
- 还是使用 bash / python / etc 脚本更好?