CMake包括非cmake库的第三方标头

时间:2018-09-09 20:51:31

标签: c++ cmake

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

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

我正在尝试在#include "header.h"的代码中包含header.h,但是预处理器无法找到标题。

我尝试使用src CMakeLists.txt中的target_include_directories添加第三方包含目录,但这无济于事。我已经尝试了thirdparty/somelib/include../thirdparty/somelib/include的路径。

如何正确在包含路径上获取标题?

1 个答案:

答案 0 :(得分:1)

将我的评论转换为答案,并进一步详细说明一些细节

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

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

请确保根据需要调整可见性(请参见docs)。此外,如果您打算安装目标,则应使用类似生成器的表达式

来调整已安装标头的位置,使其与构建期间使用的标头不同(尤其是与API的面向用户的标头)。
target_include_directories(foo PUBLIC
  $<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/thiirdpart/somelib/include/>
  $<INSTALL_INTERFACE:include/thirdparty/somelib/include>  # or whichever structure you choose
)