CMake 子目录库和主项目

标签 c gcc cmake

这是一个例子,我今天在谷歌上搜索了很多,但我找不到完成这件事的好方法。

例如,我遵循了此链接中的内容:http://mirkokiefer.com/blog/2013/03/cmake-by-example/

我有

/Build
/Src
 => main.c
  /Lib
      => File.c
      => File.h

我在 Src 目录中有一个 CMakeLists.txt

SET(SOURCES
    main.c
)
add_subdirectory(Lib)
ADD_EXECUTABLE(${PROJECT_NAME} ${SOURCES})
TARGET_LINK_LIBRARIES(${PROJECT_NAME} lib)

在 Lib 目录中:

set(LibSrc
    File.c
)
set(LibHead
    File.h
)
add_library(lib STATIC ${LibSrc} ${LibHead})
target_include_directories(lib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})

当我编译项目时,一切都编译正确,但是当 gcc 将库与项目的其余部分链接时,我收到如下错误:

main.cpp:(.text+0x10): undefined reference to `test()`

这让我发疯了......关于我哪里做错的任何提示?谢谢

最佳答案

它看起来像你的 target_link_libraries命令缺少依赖项列表。我想在你的情况下,你只想链接“lib”,所以你需要将其更改为:

target_link_libraries(${PROJECT_NAME} lib)

顺便说一句,您在行中的 {CMAKE_CURRENT_SOURCE_DIR} 之前缺少一个 $

target_include_directories(lib PUBLIC {CMAKE_CURRENT_SOURCE_DIR})

关于CMake 子目录库和主项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28992900/

相关文章:

c++ - 使用 SFINAE 在 GCC 和 Clang 上给出不同的结果

c - 如何从二进制文件转换为可重定位目标文件并返回?

c - GCC 不会通过位掩码警告 0 或 1

c++ - 使用 CMake 构建项目,包括使用不同构建系统的其他库

linux - 如何手动修复 ld-linux.so.2 错误

c++ - 用于 python 列表的 SWIG typemap to double *

c - fork父子通信

c++ - 使用 CMake 在 C++ 中未定义的 Python 引用

c - 套接字编程代码在 XP 上执行但在 Windows 7 上失败

c++ - 如何故意触摸内存页?