我的项目具有以下结构:
-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
中的函数吗?如果是,该如何解决。
注意::我尝试了一些测试,主要是here的建议。但是它仍然无法正确链接。
错误消息:
$ 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