当前位置: 首页 > news >正文

C++ 解决要编译的工程和依赖工程重名文件夹的问题

假设这样一个场景 A 是待编译主要工程,B 是依赖的三方库

A 的目录树是

src
├── common
│   ├── base_type.cpp
│   └── base_type.h
└── main.cpp

B 的目录树是

include
├── common
│   └── base_type.h
└── interface└── interface.h

我的 A 在编译的时候,指定引用了 B 的头文件(include 文件夹),然后 A 的 main.cpp 写了

#include "common/base_type.h"

这个时候,就不知道用的 A 还是 B 的 base_type.h 了

解决办法 1

是改 A 工程的 common 文件夹,增加一级目录

解决办法 2

在编译 B 产出最终的库文件的时候,追加一层目录

假设我用 cmake 编译的 B,我追加了一个 test 目录

install(DIRECTORY "include/" DESTINATION ${PROJECT_DIR}/output/include FILES_MATCHING PATTERN "*.h*")====>install(DIRECTORY "include/" DESTINATION ${PROJECT_DIR}/output/include/test FILES_MATCHING PATTERN "*.h*")

这个时候,B 的目录树变成了

include
└── test├── common│   └── base_type.h└── interface└── interface.h

这个时候,A 引用 B 的 base_type.h 就变成了

#include "common/base_type.h"===>#include "test/common/base_type.h"

但是有一点要注意,假设 A 要使用 B 的 interface.h,如果 B 的 interface.h 文件里写了

#include "common/base_type.h"

就可能 A 编译的时候,报错找不到 base_type.h,这个时候要把 B 里面的这些路径改成相对路径

#include "../common/base_type.h"

就正常了


http://www.mrgr.cn/news/12856.html

相关文章:

  • WHAT - Jamstack(JavaScript, APIs, and Markup 与 Serverless 无服务器架构)
  • 详解ACL限制SSH、Telnet远程登录及抓包实验
  • Java 入门指南:Java IO流 —— 转换流、扫描流、打印流
  • vTable实现多维表格
  • erlang学习:gen_server书上案例22.6练习题5
  • Obsidian dataview 高级使用技巧 【文件筛选/排序/分组/限制】
  • CSS3中display显示属性
  • 前后端交互的过程
  • 【生活英语】3、支持和鼓励
  • 弗洛伊德(Floyd)算法(C/C++)
  • CMake构建学习笔记9-Eigen库的构建
  • Oracle Linux 7.9 安装minikube体验
  • C++中 inline 的含义是什么?
  • iptables笔记汇总
  • centos 部署 scrapy 爬虫详细教程
  • [论文笔记] LLM-ICL论文:AI模型对prompt格式分隔符的敏感性——结构化Prompt格式
  • 报表融合大屏,做不一样的财务分析!
  • 不可不知的DP协议过往史
  • vue el-tree主键id重复 添加自增id 以及原相同节点同步勾选 同步操作
  • 关于技术专项工作的梳理和总结