我的背景是常规的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
中我想我在这里遗漏了一些基本而简单的东西,但我对如何解决这个问题缺乏启发。任何帮助表示赞赏。
答案 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
选项传递给链接器,但链接器找不到此库,因为它目前尚未构建。