【问题标题】:Adding third party static library + headers in CMake [duplicate]在CMake中添加第三方静态库+标头[重复]
【发布时间】:2021-11-21 02:16:15
【问题描述】:

我有一个第三方静态库,我想将其添加到项目中,并且由于该库正在持续更新,我想坚持使用根目录中的单个 CMakeLists.txt(如果可能) - 或至少是每次更新库时需要最少定制量的设置。

假设我的文件结构是这样的:

├── include
│   └── my_api
│       ├── some
│       │   └── long
│       │       └── path
│       │           └── include
│       │               ├── header1.h
│       │               └── header2.h
│       └── other
│           └── very
│               └── long
│                   └── path
│                       └── include
│                           ├── header3.h
│                           └── header4.h
├── lib
│   └── libmy_api.a
├── CMakeLists.txt
└── main.cpp

我学习了大量教程,但是当我在 main.cpp 中包含其中一个标头时,CMake 或 Make 无法构建,或者我得到“没有这样的文件或目录”。

我绝不是 CMake 超级用户,我什至不确定是否有可能在根目录中只使用一个 CMakeLists.txt、处理所有内容,或者这是否是一种好习惯。

更复杂的是,header1.h 依赖于 header3.h 使用此路径:

#include "other/very/long/path/include/header3.h"

感谢所有帮助 - 谢谢!

【问题讨论】:

    标签: c++ cmake static-libraries


    【解决方案1】:

    包含目录由include_directories(...)target_include_directories(...) 命令添加。您需要将路径添加到包含您在标题中使用的相对路径的包含目录。

    您可以使用add_library(name STATIC IMPORTED) 之类的方式添加库。然后通过set_target_properties(name PROPERTIES IMPORTED LOCATION some/path/lib.a) 添加位置。然后你可以像往常一样将它链接到你的目标。

    供参考:

    【讨论】:

    • 谢谢!现在它建立了。但是,当 #include other/very/long/path/include/header3.h 从 header1.h 中时,我仍然收到错误。知道如何解决这个问题吗?
    • 取决于实际的错误信息。也许你没有在需要的地方添加正确的路径。
    • 这是一个简单的“没有这样的文件或目录”。路径是正确的,我能够包含 main.cpp 中的所有标头。但我不能在 header1 中包含例如 header3。
    • 这意味着您要么指定了错误的文件路径,要么没有添加正确的包含目录。除非你展示你实际上是如何做到的,否则只有你能发现。祝你好运!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    • 1970-01-01
    • 2018-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多