【问题标题】:How to link an external library with cmake?如何将外部库与 cmake 链接?
【发布时间】:2016-06-12 22:19:19
【问题描述】:

我正在尝试使用 CMake 构建一个项目。该项目所需的库之一位于我的项目目录之外的路径上。头文件分散在子目录以及文件夹的根目录中。有点像这样:

/some_remote_path/packages/BOOX/
               |-> foo.h
               |-> banana.h
               |-> orange.h
               |-> timer
                     |-> lib0.h
                     |-> lib1.h
                     |-> lib2.h
               |-> types
                     |-> type0.h
                     |-> type1.h
                     |-> type2.h
               ...

我正在尝试使用以下命令链接这些:

include_directories (${SOME_OTHER_LIB_HEADERS} ${BOOX_HEADERS})

如何将所有标题存储到${BOOX_HEADERS} 变量中?我尝试了很多东西,例如利用 GLOB_RECURSE 功能的各种宏:

FILE(GLOB_RECURSE ${BOOX_HEADERS} ${path_to_boox_lib} *.h)

但没有任何成功。我想跳过编写复杂的find.cmake 脚本。那会帮助我(可能?)生成类似 ${BOOX_INCLUDE_DIRS} 的东西。什么是简单地构造头列表并使用 CMake 将其传递给编译器的最佳解决方案。

【问题讨论】:

  • 您没有通过包含标题来链接任何内容。对于多个位置的标题,您可以将列表分配给变量
  • 是的,如何通过递归收集所有头文件来创建列表变量?我应该编辑我的问题以使其更清楚。一旦我解决了这个问题,我将继续使用 lib 文件。
  • 你不应该收集任何头文件,*.h。 include_directories 用于包含头文件的目录。您需要为 BOOX 目录、计时器和类型执行 include_directories,除非您使用 `#include 包含 lib0.h。那么你只需要顶层目录BOOX
  • 所以我必须手动指定每个子文件夹?
  • 是的,或者只是顶部文件夹,如果您在包含中附加 timertypesinclude_directories 用于目录而不是标题

标签: c++ linker cmake


【解决方案1】:

我正在尝试使用以下命令链接这些:

您正在将标题包含在您给出的命令中,您还需要如何使用link_directories(directory1 directory2 ...) 为库定义 LIB 路径

【讨论】:

    猜你喜欢
    • 2021-08-06
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 2021-09-17
    相关资源
    最近更新 更多