相关疑难解决方法(0)

CMake:多库包导出中的依赖关系管理

我有一个名为MYLIBS的包,由两个库lib1lib2组成,我想通过包的配置文件导出它们。项目结构如下:

\n\n
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Lib1\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 CMakeLists.txt\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 lib1-class.cpp\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 lib1-class.h\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 lib2\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 CMakeLists.txt\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 lib2-class.cpp\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 lib2-class.h\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 cmake\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 LIBSConfig.cmake.in\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 CMakeLists.txt\n
Run Code Online (Sandbox Code Playgroud)\n\n

lib2中我有:

\n\n
add_library(lib2\n        STATIC\n        ${SOURCE_FILES}\n        )\ntarget_include_directories(lib2 PRIVATE /path/to/lib1)\ntarget_link_libraries(lib2 PUBLIC lib1)\nadd_dependencies(lib2 lib1)\ninstall(\n        TARGETS\n        lib2\n        DESTINATION\n        lib/MYLIBS/lib2\n        EXPORT\n        lib2Exports\n)\ninstall(\n        EXPORT\n        lib2Exports\n        DESTINATION\n        lib/MYLIBS/lib2\n)\n
Run Code Online (Sandbox Code Playgroud)\n\n

与 lib1 相同,只是 lib1 没有add_dependencies()target_include/link(),因为它没有 。

\n\n

在我的配置文件模板中,我有:

\n\n
@PACKAGE_INIT@\n## PROJECT_LIBRARIES is filled-in during the package build. in this case : lib1,lib2\nset(@PROJECT_NAME@_LIBRARIES @PROJECT_LIBRARIES@)\n\n## The public …
Run Code Online (Sandbox Code Playgroud)

c++ dependencies cmake dependency-management

5
推荐指数
1
解决办法
5469
查看次数

标签 统计

c++ ×1

cmake ×1

dependencies ×1

dependency-management ×1