#c #makefile #cmake
#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)
LinearAlgebra/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. Для связи
test
исполняемого файла сlinear_algebra
библиотекой вам необходимо использоватьtarget_link_libraries
command . Командаlink_libraries
перечисляет библиотеки для связи с ними всех последующих исполняемых файлов.
Ответ №1:
При link_libraries
этом вы определяете, какие библиотеки будут связаны для целей, определенных после этой команды и в текущем каталоге.
Вероятно, вы имели в виду использовать target_link_libraries
which defines 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)