c++ - CMake 包含第 3 方项目

标签 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 中

我想我在这里遗漏了一些基本且简单的东西,但我缺少有关如何解决该问题的指导。感谢您的帮助。

最佳答案

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

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

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

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

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

关于c++ - CMake 包含第 3 方项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46683223/

相关文章:

c++ - 从文件中读取 C++

c++ - 改变 wxToolBar 的高度

c++ - 在计算列表中获取前 n 项的最快方法是什么?

c++ - 什么时候需要显式指针类型转换?

unit-testing - CTest-使用--test-command选项进行--build-and-test

c++ - 如何使用CMake链接 "numpy/arrayobject.h"

mfc - 使用 CMake 制作包含 MFC 的项目

c++ - 我如何在某些全局击键时使用 Python 或 C++ 将一些文本粘贴到 linux 中的当前事件应用程序

android - CMake共享项目子目录避免重建

cmake - ctest 可以输出测试程序中的所有日志消息,例如升压测试?