使用 cmake 正确链接库

Posted

技术标签:

【中文标题】使用 cmake 正确链接库【英文标题】:Link properly a library using cmake 【发布时间】:2021-02-11 10:34:15 【问题描述】:

我尝试学习如何使用 cmake,因此我创建了一个小项目,但是当我尝试编译时出现此错误:/usr/bin/ld : CMakeFiles/test.dir/main.cpp.o : dans la fonction « main » : main.cpp:(.text+0x2d) : référence indéfinie vers « la::Matrice<int>::Matrice(unsigned int, unsigned int) »

.
├── build
│   ├── CMakeCache.txt
│   ├── CMakeFiles
│   ├── cmake_install.cmake
│   ├── LinearAlgebra
│   └── Makefile
├── CMakeLists.txt
├── LinearAlgebra
│   ├── CMakeLists.txt
│   ├── Matrice.cpp
│   └── Matrice.hpp
└── main.cpp

./CmakeLists.txt :

cmake_minimum_required(VERSION 3.10)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED true)

project(test_project)


add_subdirectory(LinearAlgebra)



add_executable(test main.cpp)
link_libraries(test linear_algebra)

线性代数/CMakeLists.txt:

cmake_minimum_required(VERSION 3.10)

project(linear_algebra)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)

set(SOURCES
    Matrice.cpp

)

set(HEADERS
    Matrice.hpp
)

add_library(linear_algebra $HEADERS $SOURCES)

有人知道问题出在哪里吗?

【问题讨论】:

对于链接testlinear_algebra 库的可执行文件,您需要使用target_link_libraries 命令。命令link_libraries 列出库以与它们链接所有进一步 可执行文件。 【参考方案1】:

使用link_libraries,您可以定义哪些库将为在此命令之后和当前目录中定义的目标链接

您可能打算使用target_link_libraries,它定义了链接到给定目标的库。 文档建议尽可能在link_libraries 上使用它。它是明确的,范围更广。

cmake_minimum_required(VERSION 3.10)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED true)
project(test_project)
add_subdirectory(LinearAlgebra)
add_executable(test main.cpp)
target_link_libraries(test linear_algebra)

【讨论】:

以上是关于使用 cmake 正确链接库的主要内容,如果未能解决你的问题,请参考以下文章

如何在 cmake 中正确链接库?

当我链接动态库而不是静态库时,CMake 有效

CMAKE将动态库链接到模块,但不显示为链接依赖

如何使用cmake生成基于静态库的动态链接库

opencv静态链接库cmake链接顺序问题

使用 cmake 如何静态链接一些库和动态链接其他库?