C++ CMake工程添加第三方头文件库的include路径导致的编译问题

项目场景:

最近要在项目中添加一个第三方的头文件库(我用的是spdlog),官方的文档建议放在项目的include文件夹下,但是我的项目没有incldue文件夹,只有3rdparty这个文件夹,如果放在3rdparty下,cmake编译有问题


解决方案

先上解决方案:
在这里插入图片描述
关键代码是这两行:

   ${CMAKE_SOURCE_DIR}/3rdparty
   ${CMAKE_SOURCE_DIR}/3rdparty/spdlog

分析:

如上图所示,我添加了spdlog,首先添加

${CMAKE_SOURCE_DIR}/3rdparty/spdlog #1

补充一下我是如何在文件中使用spdlog的:
在这里插入图片描述
如果只添加了#1的话,会报如下错误(spdlog.h找不到自身需要的库文件):
在这里插入图片描述
因为在spdlog中头文件引用方式为:
在这里插入图片描述
此时,修改所有的spdlog库文件中的include语句,去除额外的spdlog,可以编译成功

#include <spdlog/common.h> //改为 #include <common.h>

或者cmake tartget_include_directory修改为:

${CMAKE_SOURCE_DIR}/3rdparty

然后修改include的方式,但是这可能会导致其他的问题(我已经搞定了,懒得复现了,如果可以用也可以采用这种方式)

其实只要再添加一句(#2)就能解决问题:

    ${CMAKE_SOURCE_DIR}/3rdparty #2
    ${CMAKE_SOURCE_DIR}/3rdparty/spdlog #1

当然如果你不介意修改项目结果,添加一个include文件夹的话,只要把头文件库丢进include,甚至可以不配置target_include_directories都可以成功编译

  • 最后再补充一个替换的写法,省事但是不太推荐:
file(GLOB 3RDPARTY_INCLUDE "${CMAKE_SOURCE_DIR}/3rdparty/*")
target_include_directories(你的项目名 PUBLIC ${3RDPARTY_INCLUDE})

省略了你一项一项添加,但是维护起来就不太方便

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值