Makefile引用父目录文件时报错找不到common/info.h如何解决?
问题原因
你的配置有两个核心错误:
- 路径拼接错误
-I$(INC_DIR)../中$(INC_DIR)取值为src/common,替换后实际参数为-Isrc/common../,shell会将其拆分为两个独立参数:-Isrc/common和../,相当于你添加了两个完全不符合预期的头文件搜索路径。 - 搜索路径逻辑错误
你的util.h中用的是#include "common/info.h"写法,编译器会从配置的搜索路径下拼接common/info.h查找文件,因此需要把common目录的父目录加入搜索路径,而不是common目录本身。
你执行make的工作目录是prog/test/perf/,复制后的common目录位于prog/test/src/下,对应common的父目录相对路径为../src,你配置的两个搜索路径都找不到对应文件。
修复方案
直接调整Makefile的头文件搜索路径配置即可:
INC_DIR = ../src DFLAGS = -MT $@ -MD -MP -MF $(O)/$*.d CFLAGS = -Wall -Werror $(OPT) $(STD) -I$(INC_DIR)
额外优化建议
你不需要把公共代码复制到test目录下,直接引用项目根目录的公共文件即可,避免后续修改公共代码时两边同步冗余,配置可以改成:
# 直接指向项目根目录下的src,不需要复制公共代码 INC_DIR = ../../src DFLAGS = -MT $@ -MD -MP -MF $(O)/$*.d CFLAGS = -Wall -Werror $(OPT) $(STD) -I$(INC_DIR)
内容的提问来源于stack exchange,提问作者kernelman
相关产品推荐
相关产品推荐

