假设这样一个场景 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"
就正常了