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"

就正常了

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值