Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cmake 从一个子模块到另一个子模块的库延迟链接_Cmake - Fatal编程技术网

Cmake 从一个子模块到另一个子模块的库延迟链接

Cmake 从一个子模块到另一个子模块的库延迟链接,cmake,Cmake,碰巧在某个时候,我得到了一个有usb模块的项目,它有一个子模块。。。。大约5-6个项目相互串联。阅读和使用都不方便。如果通过find_包实现,项目将变得更加灵活,您可以将子模块连接到库或使用某些系统模块 这样结构就不会是级联的,而是相当简单的。所有子模块将在工作项目中连接 现在更详细地介绍一个测试项目: Project -> subs -> lib_one -> lib_two 所需的第二个库是第一个库的逻辑 1) 第一个CMakeLists

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

这样结构就不会是级联的,而是相当简单的。所有子模块将在工作项目中连接

现在更详细地介绍一个测试项目:

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})
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)
2) 第二个CMakeLists library.txt:

cmake_minimum_required(VERSION 3.6)

set(One_SOURCES
    One.h
    One.cpp
)
add_library(One_LIB STATIC ${One_SOURCES})
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
对于此类项目:

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

这里的问题是什么?您是否使用您提供的CMake收到了特定的错误消息?位于subs/LibTwo/Two/CMakeLists.txt:10(find_package)的CMake警告:通过在CMake_模块_路径中不提供“FindOne_LIB.CMake”,此项目要求CMake查找“One_LIB”提供的包配置文件,但CMake找不到。找不到“one_LIB”提供的具有以下任何名称的包配置文件:one_LIBConfig.CMake one_LIB-config.CMake将“one_LIB”的安装前缀添加到CMake_前缀路径,或将“one_LIB_DIR”设置到包含上述文件之一的目录。如果“one_LIB”提供了一个单独的开发包或SDK,请确保它已安装。我可能需要使用此说明,但我不太明白:
find\u package
希望引用的项目已生成(并已安装)
add_library
命令不会立即生成库(在配置阶段),而只是声明稍后生成库(在生成阶段)。这会有帮助吗