在cmake项目中使用静态库
using static libraries in cmake project
我有两个C++项目A和B。项目B依赖于项目A。项目A将此结构拆分为一些子目录:
Project A
|-inc
| |-a1.h
| |-a2.h
|-src
|-CMakeLists.txt
|-subdir_A1
| |-CMakeLists.txt
| |-a1.cpp
|
|-subdir_A2
|-CMakeLists.txt
|-a2.cpp
Project B
|-lib
|-a1.h
|-a2.h
|-lib_ProjectA.a
|-src
|-CMakeLists.txt
|-b.cpp
问题是项目B无法解决项目A的定义。虽然我已经在项目B中将target_link_libraries
添加到CMakeLists.txt中,但我有一个错误,如下所示:
对`project_a::a1::func1()"的未定义引用
UPD1
我通过从子目录(liba1.a,liba2.a)中复制所有库并将它们链接到项目中,成功地编译了项目B。我想知道是否可以调整项目A,这样我就只能使用一个文件lib_ProjectA.A
UPD2
代码:
项目A
add_library (adapter
adapter.cpp
)
target_link_libraries (adapter PUBLIC
net # From project's A subdirectory
utils # From project's A subdirectory
)
项目B
add_library (anthill
functional_block.cpp)
target_link_libraries(anthill
${PROJECT_SOURCE_DIR}/lib/libjsoncpp.a
${PROJECT_SOURCE_DIR}/lib/libadapter.a
${PROJECT_SOURCE_DIR}/lib/libnet.a # Can't compile without it
${PROJECT_SOURCE_DIR}/lib/libutils.a # Can't compile without it
)
使用OBJECT选项的最佳解决方案:
add_library(myObjects OBJECT a.c b.c)
相关文章:
- cmake如何在fedora工作站中找到boost静态库包
- cmake在我的项目中所需的所有静态库都不成功
- 停止cmake target_link_libraries将插件中静态库的两个对象文件链接到静态库本身
- 将源中的 GLEW 与 cmake 静态链接
- 在 CMAKE 中使用具有静态依赖项的库
- 在现代 CMake 项目中存档静态依赖项
- 使用 CMake 与其他静态库链接的静态库 - 一个有效,一个无效。为什么?
- Linux Mint 19 上的 CMake 3.11 无法找到静态的 Boost 库
- 强制链接静态库与 cmake 不起作用
- 静态链接到 CMake 中的 macOS 框架
- 如何使用 CMake 生成链接到静态库的 DLL
- CMake 外部和内部静态库的循环依赖关系
- CMake 不链接 C 和 C++ 静态库(未定义对函数的引用)
- 使用CMAKE构建和安装静态库
- 如何使用cmake设置OpenCV以启用动态和静态构建
- Cmake 查找模块用于区分共享库或静态库
- 当我链接动态库而不是静态库时,CMake 有效
- CMake 项目链接静态库
- 使用 CMake 在 Mac 上链接静态 GLFW 和 OpenGL
- 如何将 SDL2 用作我的静态 (CMake ) 库的 3D 方依赖项?