使用 cmake 正确链接库

时间:2021-02-11 10:34:15

标签: c++ makefile cmake

我尝试学习如何使用 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})

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

1 个答案:

答案 0 :(得分:0)

使用 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)