CMake子库和主项目

时间:2015-03-11 17:05:02

标签: 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()`

这让我发疯了...有什么迹象表明我做错了吗?谢谢

1 个答案:

答案 0 :(得分:2)

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

target_link_libraries(${PROJECT_NAME} lib)

顺便说一句,你在行中$之前错过{CMAKE_CURRENT_SOURCE_DIR}

target_include_directories(lib PUBLIC {CMAKE_CURRENT_SOURCE_DIR})