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

CMake Include third party header for a non cmake library

本文关键字:第三方 包含非 cmake CMake      更新时间:2023-10-16

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

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

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

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

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

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

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

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

确保根据需要调整可见性(请参阅文档(。此外,如果您计划安装目标,则应使用如下所示的生成器表达式,以不同于构建期间使用的位置(尤其是 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
)