【问题标题】:Cmake cannot find header from libraryCmake 无法从库中找到头文件
【发布时间】:2020-08-14 02:43:27
【问题描述】:

我的项目中有以下结构。

project-
  include-
  src-
     ab.cpp
     ab.h
  tests
     CMakeLists.txt
  CMakeLists.txt

我使用add_libraryproject/CMakeLists.txt 目录中创建库。在测试目录 CMake 中,我使用 target_link_libraries。现在我的 test.cpp 它没有找到 ab.h 我必须使用 target_include_directoriesproject/src 路径。 target_link_libraries 是否仅从 include 目录中找到标头或我在这里缺少什么?

【问题讨论】:

  • target_link_libraries 仅影响链接器设置,与添加额外的包含位置无关
  • 与其只知道项目的结构,还需要查看您的 CMakeLists.txt 文件以提供合理的建议。

标签: c++ cmake


【解决方案1】:

链接所需的操作类似于 C++ 项目的常规流程。

对于具有这种结构的项目:

src
  A.cpp
  A.h
  B.cpp
  B.h

B.cpp中的代码要使用A.h中定义的函数时,需要用#include<A.h>语句声明它,这样A.h的代码会被预处理器复制,所以@987654326的翻译单元@ 知道它的存在。

在链接阶段,所有目标文件都被链接 - 您通过声明所有 A.h 声明做出的“承诺”由 A.o 履行。

同样,当test.cpp 使用库中的函数时,您首先需要声明它,这就是为什么您应该使用target_include_directories 并在test.cpp 中包含ab.h

然后,对于链接阶段,您应该让链接器知道在哪里找到在 ab.h 中声明的那些函数的实现(您的静态/动态库文件),为此您使用 target_link_libraries

【讨论】:

    猜你喜欢
    • 2021-04-12
    • 2015-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-02
    • 2014-08-02
    相关资源
    最近更新 更多