【问题标题】:Add subdirectory as a library to CMakeLists.txt将子目录作为库添加到 CMakeLists.txt
【发布时间】:2021-04-21 13:01:53
【问题描述】:

TLDR:我有两个使用 CMakeLists.txt 的项目(项目 A 和 B),它们都构建可执行文件并且它们单独工作。现在,我想将项目 A 用作项目 B 中的库,我们称之为项目 AB。我该怎么做?

当前目录结构:

项目A

rootA
 |- bin
 |   |-
 |- build
 |   |-
 |- external-includes
 |- CMakeLists.txt with add_subdirectory(libraryA)
 |- libraryA
     |- main.cpp (uses library_A in an example program)
     |- library_A.cpp
     |- library_A.h
     |- Other .h and .cpp files library_A uses
     |- CMakeLists.txt having add_executable (library_A main.cpp library_A.cpp ....)

项目 B

rootB
 |- bin
 |   |-
 |- build
 |   |-
 |- external-includes
 |- CMakeLists.txt with add_subdirectory(libraryB)
 |- libraryB
     |- main.cpp
     |- library_B.cpp
     |- library_B.h
     |- Other .h and .cpp files library_B uses
     |- CMakeLists.txt having add_executable (library_B main.cpp library_B.cpp ....)

AB项目

rootAB
 |- bin
 |   |-
 |- build
 |   |-
 |- external-includes
 |- rootA 
 |- CMakeLists.txt with add_subdirectory(libraryB)
 |- libraryB
     |- main.cpp
     |- library_B.cpp
     |- library_B.h
     |- Other .h and .cpp files library_B uses
     |- CMakeLists.txt having add_executable (library_B main.cpp library_B.cpp .....)

到目前为止我已经尝试过:

我尝试将include_directories(rootA/libraryA)add_sudirectory(rootA) 添加到rootAB/CMakeLists.txt 和#include <library_A.h> 到rootAB/libraryB/main.cpp,然后它抱怨链接错误(未解析的外部符号)。如果我添加 #include <library_A.cpp> ,它将抱怨来自库 A 的其他链接错误,如果我单独构建 library_A 则不会发生这种错误。可能我想要做的是将 library_A 构建为(静态)库并将其链接到 ProjectAB 中(最好使用当前目录结构和对 CMakeLists.txt(s) 的修改)。该怎么做?

【问题讨论】:

  • 也许你应该在库子目录CMakeLists.txt 文件中有`add_library` 命令?然后,您可以在 target_link_libraries 命令中使用该库。
  • @Someprogrammerdude 找到this,将尝试更新问题

标签: c++ cmake


【解决方案1】:

this示例中所做的那样,修改rootAB/rootA/libraryA/CMakelists.txt,替换

add_executable (library_A main.cpp library_A.cpp ....)

add_library (library_A library_A.cpp ....)

并在 rootAB/libraryB/CMakelists.txt 中添加

target_link_libraries(library_B library_A)

【讨论】:

    猜你喜欢
    • 2021-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-06
    • 1970-01-01
    • 2014-08-01
    相关资源
    最近更新 更多