我尝试学习如何使用 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})
有人知道问题出在哪里吗?
答案 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)