【问题标题】:CMake: build lib and link it to executable results in undefined reference errorCMake:构建 lib 并将其链接到可执行文件会导致未定义的引用错误
【发布时间】:2019-07-14 11:37:44
【问题描述】:

我有一个 cmake 设置,它应该首先构建一个库,然后使用这个库来创建一个可执行文件:

# build and install the project lib
add_library(lib${PROJECT_NAME} 
    test.cpp
)
install(TARGETS lib${PROJECT_NAME} DESTINATION ${INSTALL_DIR})
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/ DESTINATION ${INSTALL_INCLUDE_DIR} FILES_MATCHING PATTERN "*.h*")


# link lib and create executable
add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(lib${PROJECT_NAME})

install(TARGETS ${PROJECT_NAME} DESTINATION ${INSTALL_DIR})

lib 构建部分有效,但似乎 lib 的链接不起作用。我正在使用一个在 test.cpp 中实现的简单 add 方法,我得到了一个未定义的对该方法的引用。

我在这里缺少什么?

【问题讨论】:

  • target_link_libraries 调用的第一个参数必须是可执行目标的名称,即${PROJECT_NAME},第二个是库目标。
  • 是的,就是这样,下次应该仔细阅读文档……谢谢。你可以把它放在一个答案中并接受它。

标签: c++ cmake linker


【解决方案1】:

target_link_libraries 调用的第一个参数必须是库应该链接到的目标的名称,即 ${PROJECT_NAME} 在您的情况下,第二个参数是库目标。请参阅target_link_libraries 的文档。

在您的示例中,您需要使用:target_link_libraries(${PROJECT_NAME} lib${PROJECT_NAME})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-25
    • 1970-01-01
    • 1970-01-01
    • 2016-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    相关资源
    最近更新 更多