函数CMake的未定义参考

Exa*_*gon 4 c++ linker build cmake

我正在尝试学习CMake,但是我得到一个未定义的引用...链接器错误我有一个带有子目录的目录.他们每个人都有自己的CMakeLists.txt

test
|----main.cpp
|----CMakeLists.txt
|----test2
     |----foo.hpp
     |----foo.cpp
     |----CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)

用于测试的CMakeLists.txt是:

cmake_minimum_required(VERSION 3.5)
project(tests)

add_subdirectory(test2)
set(SOURCE_FILES main.cpp)
add_executable(tests ${SOURCE_FILES})
Run Code Online (Sandbox Code Playgroud)

test2的CMakeLists.txt是:

set(test2_files
        foo.cpp
        foo.hpp
        )
add_library(test2 ${test2_files})
Run Code Online (Sandbox Code Playgroud)

foo.cpp实现了foo.hpp 为此函数定义的函数我得到了未定义的引用错误.我究竟做错了什么?如何摆脱此链接器错误

编辑:我的CMakeLists.txt现在看起来像这样,但我仍然得到链接器错误:

project(tests)

cmake_minimum_required(VERSION 2.8)

set(SOURCE_FILES main.cpp)

include_directories(test2)
link_directories(test2)

add_subdirectory(test)

add_executable( ${PROJECT_NAME} ${SOURCE_FILES} )

target_link_libraries(${PROJECT_NAME} test2)
Run Code Online (Sandbox Code Playgroud)

我也尝试用绝对路径而不是 test2

编辑:解决了它只是test2的CMakeLists.txt中的一个错字.

dav*_*ler 7

确保您的测试CMakeLists.txt链接到创建的库.

project(test)

cmake_minimum_required(VERSION 2.8)

set(SOURCE_FILES main.cpp)

include_directories( test2 )

#here
link_directories(test2)

add_subdirectory(test2)

add_executable( ${PROJECT_NAME} ${SOURCE_FILES} )

#and here
target_link_libraries( ${PROJECT_NAME} test2 )
Run Code Online (Sandbox Code Playgroud)

  • 如果我正在使用此文件,则会收到以下错误消息:`/ usr / bin / ld:无法找到-ltest2`。 (2认同)