CMake包括第三方项目

时间:2017-10-11 08:19:49

标签: c++ cmake

我的背景是常规的makefile,我正在尝试将项目转换为CMake设置。

当我尝试将g3log作为子项目包含时,我感到困惑。

我在CMakeLists.txt中添加了以下行。 请注意,.. / .. / external / g3log_src是第三方产品的顶级目录。

target_link_libraries( myproject LINK_PUBLIC ${Boost_LIBRARIES} g3log)
set(DG3_SHARED_LIB OFF)
include_directories("../../external/g3log_src/include")
add_subdirectory (../../external/g3log_src LIBRARY_OUTPUT_PATH/g3log)

然而,它实际上不会构建g3log,所以我无法链接它: ld:找不到-lg3log的库

有一行

project (g3log)

包含在g3log CMakeLists.txt

我想我在这里遗漏了一些基本而简单的东西,但我对如何解决这个问题缺乏启发。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

与3d-party库链接时,您应使用库名,而不是项目名称。对于g3log,库名称为g3logger

此外,构建3d-party项目应该 prepend 使用它:

add_subdirectory (../../external/g3log_src g3log)
...
target_link_libraries( myproject LINK_PUBLIC ${Boost_LIBRARIES} g3logger)

这是因为链接应该使用目标名称执行,只有在处理了3d-party项目后才知道CMake。

否则,您只需将-lg3logger选项传递给链接器,但链接器找不到此库,因为它目前尚未构建。