对函数CMake的未定义引用

fxnxkyjh  于 2023-11-19  发布在  其他
关注(0)|答案(2)|浏览(132)

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

test
|----main.cpp
|----CMakeLists.txt
|----test2
     |----foo.hpp
     |----foo.cpp
     |----CMakeLists.txt

字符串
用于测试CMakeLists.txt为:

cmake_minimum_required(VERSION 3.5)
project(tests)

add_subdirectory(test2)
set(SOURCE_FILES main.cpp)
add_executable(tests ${SOURCE_FILES})


test2的CMakeLists.txt是:

set(test2_files
        foo.cpp
        foo.hpp
        )
add_library(test2 ${test2_files})


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)


我还尝试使用绝对路径而不是test2
编辑:解决了它,这只是测试2的CMakeLists.txt中的一个错字。

2w2cym1i

2w2cym1i1#

确保测试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 )

字符串

zrfyljdw

zrfyljdw2#

函数add_subdirectory($dir)不会自动添加$dir以包含目录和链接目录。要使用库test2,您应该在test目录的CMakeLists.txt中手动添加:

include_directories(test2/)
link_directories(test2/)

字符串
然后,将可执行文件与test2库链接以获取函数定义。添加到test目录的CMakeLists.txt中:

target_link_libraries(tests test2)

相关问题