c++ - CMake 包含非 cmake 库的第三方 header

标签 c++ cmake

我有一个这样设置的项目:

project
  CMakeLists.txt
  src
    CMakeLists.txt
    Mylib.cpp
  thirdparty
    somelib
      include
        header.h

我正在尝试使用 #include "header.h" 在我的代码中包含 header.h,但是预处理器找不到 header 。

我尝试在 src CMakeLists.txt 中使用 target_include_directories 添加第三方包含目录,但这没有帮助。我已经尝试了 thirdparty/somelib/include../thirdparty/somelib/include 作为路径。

如何正确获取包含路径上的 header ?

最佳答案

将我的评论转化为答案并进一步阐述一些细节

使用项目树的顶级目录(即根目录)很方便,它还具有保护您免受依赖目标上可能发生的任何位置更改的好处

target_include_directories(foo PUBLIC ${CMAKE_SOURCE_DIR}/thirdparty/somelib/include)

确保根据需要调整可见性(参见 docs )。此外,如果您计划安装您的目标,您应该使用像这样的生成器表达式来调整已安装 header 的位置,使其与构建期间使用的 header 的位置不同(尤其是 API 面向用户的 header )

target_include_directories(foo PUBLIC
  $<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/thiirdpart/somelib/include/>
  $<INSTALL_INTERFACE:include/thirdparty/somelib/include>  # or whichever structure you choose
)

关于c++ - CMake 包含非 cmake 库的第三方 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52248560/

相关文章:

c++ - 打开cmd并读写

c++ - 在 C++ 代码中返回 Obj-C block

c++ - .exe 不显示 "Press any key to continue..."

.net - 适用于 c/c++ 的 ReSharper

cmake - 如何使用CMake安装脚本?

c++ - 如何使用 CMake 通过命令行定义 C++ 预处理器宏?

c++ - C++以相同方式排列两个 vector

c++ - 将 cmake 与 Code::Blocks 一起使用

c++ - 在源代码中使用 C++ 库的 CMakeLists

dependencies - CMake 和 CTest : make test doesn't build tests