【问题标题】:CMake include 3rd party projectCMake 包含第 3 方项目
【发布时间】:2017-10-11 08:19:48
【问题描述】:

我的背景是常规的 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 中

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

【问题讨论】:

    标签: c++ cmake


    【解决方案1】:

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

    另外,构建 3d 方项目应该预先使用它:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      相关资源
      最近更新 更多