【发布时间】: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,将尝试更新问题