При использовании cmake с проектом C ++ возникает ошибка «неопределенная ссылка» - PullRequest
0 голосов
/ 19 октября 2019

Мой проект имеет следующую структуру:

-project
|- main.cpp
|- CMakeLists.txt
|- Headers
    |- animal.cpp
    |- animal.hpp
    |- lives.cpp
    |- lives.hpp
    |- CMakeLists.txt

У нас также есть:

#/project/CMakeLists.txt
cmake_minimum_required(VERSION 3.1)

set(CMAKE_CXX_STANDARD 11)

project(main)

include_directories(Headers/)
link_directories(Headers/)
add_subdirectory(Headers)

add_executable(main main.cpp Headers/animal.cpp Headers/lives.cpp)
target_link_libraries(main animal_lib)
target_link_libraries(main genome_lib)

, а также

#/project/Headers/CMakeLists.txt
add_library(lives_lib STATIC lives.cpp lives.hpp)
add_library(animal_lib STATIC animal.cpp animal.hpp)

target_include_directories(lives_lib PUBLIC ./)
target_include_directories(animal_lib PUBLIC ./)

Обратите внимание, что animal.cppвключает lives.hpp. Когда я пытаюсь запустить cmake, я получаю ошибку компоновки (undefined reference). Если я удаляю animal.cpp и animal.hpp (и все функции, которые зависят от него, поэтому используются только вещи из lives.cpp), все работает нормально. Проблема в том, что я использую функцию из lives.hpp в animal.cpp, и если да, то как мне это исправить.


Примечание: Я попробовал пару вещейВ основном это предложения от здесь . Но он все равно не связывается правильно.


Сообщение об ошибке:

$ make
[ 33%] Built target animal_lib
Scanning dependencies of target genome_lib
[ 55%] Built target lives_lib
[ 66%] Linking CXX executable main
/usr/bin/ld: CMakeFiles/main.dir/Headers/animal.cpp.o: in function `Animal::set_something(double)':
animal.cpp:(.text+0x53): undefined reference to `Animal::something_else_'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/main.dir/build.make:118: main] Error 1
make[1]: *** [CMakeFiles/Makefile2:77: CMakeFiles/main.dir/all] Error 2
make: *** [Makefile:84: all] Error 2
...