首页 > 解决方案 > 将库从一个子模块延迟链接到另一个子模块

问题描述

碰巧在某个时候我得到了一个有一个usb模块的项目,它有一个子模块....大约有5-6个项目相互级联。阅读和使用不方便。如果通过 find_package 实现,项目将变得更加灵活,您可以将子模块与库连接或使用某些系统模块。

然后结构不会是级联的,而是比较简单的。所有子模块将在工作项目中连接。

现在更具体,一个测试项目:

Project
   -> subs
       -> lib_one
       -> lib_two

需要的第二个库是第一个库的逻辑。

1)第一个CMakeLists library.txt:

cmake_minimum_required(VERSION 3.6)

set(One_SOURCES
    One.h
    One.cpp
)
add_library(One_LIB STATIC ${One_SOURCES})

2)第二个CMakeLists library.txt:

cmake_minimum_required(VERSION 3.6)

set(Two_SOURCES
    ./Two.cpp
    ./Two.h
)
add_library(Two_LIB STATIC ${Two_SOURCES})

find_package(One_LIB)
target_link_libraries(Two_LIB PRIVATE One_LIB)

在主项目的 CMakeLists.txt 中:

cmake_minimum_required(VERSION 3.6)

set(PROJ_NAME MAIN)
project(${PROJ_NAME})

set(SOURCES
    ./main.cpp
)
add_executable(${PROJ_NAME} ${SOURCES})

add_subdirectory(subs)

find_package(One_LIB)
target_link_libraries(${PROJ_NAME} PRIVATE One_LIB)

find_package(Two_LIB)
target_link_libraries(${PROJ_NAME} PRIVATE Two_LIB)

此示例项目已简化。他要走了。虽然有警告。我的完整项目不会被构建,因为在我看来,由于库的连接不正确。

请帮我弄清楚,或者你可以分享一个关于这个主题的好资源的链接。我会非常感谢你。

最后我想来自这样一个项目:

Project
   -> subs
       -> lib_two
             -> subs
                 -> lib_one

对于这样的项目:

Project
   -> subs
       -> lib_one
       -> lib_two

标签: cmake

解决方案


推荐阅读