Правильно свяжите библиотеку с помощью cmake

#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)