当前位置: 智能网 > 人工智能 > make 识别不出 .h 头文件的修改,怎么回事?

make 识别不出 .h 头文件的修改,怎么回事?

放大字体 缩小字体 发布日期:2021-06-08 10:02:44   浏览次数:181


最简单、无脑的方法

既然知道了原因,那就好办了,我们手动把头文件 hello.h 加到依赖中,不就可以了吗?!

把 Makefile 中最后面几句修改成下面这样:

HEADERS := hello.h
%.o: %.c ${HEADERS}
gcc $< -c -o $@

也就是把 .h 文件,也加入到 .o 文件的依赖中,这样的话,每次修改 .h 文件后,再执行 make 指令时,就可以重新编译 .o 目标文件了。

您可试一下,这样做肯定是没有问题的。

到此,问题是被解决了,但是总觉得这样的方式比较粗鲁。

想一下:如果有很多的 .c 和 .h 文件呢,总不能手动一个一个添加吧?

高级一点的方法

修改 Makefile 为下面这样:

OBJS := main.o
TARGET := main
all : $(OBJS)
gcc -o $(TARGET) $(OBJS)
-include *.d
%.o: %.c
gcc $< -c -MMD -o $@

改动部分有 2 处:

1. 添加了 -include *.d 指令;
2. gcc 编译指令中,添加了 -MMD 参数;

我们先执行一下试试。第一次编译:

$ ll      // 查看当前文件
total 12
-rw-rw-r-- 1 root root  58 Jun  7 21:06 hello.h
-rw-rw-r-- 1 root root 122 Jun  7 20:51 main.c
-rw-rw-r-- 1 root root 119 Jun  7 21:05 Makefile

$ make    // 编译
gcc main.c -c -MMD -o main.o
gcc -o main main.o

$ ll      // 再次查看当前文件
total 32
-rw-rw-r-- 1 root root   58 Jun  7 21:06 hello.h
-rwxrwxr-x 1 root root 8608 Jun  7 21:06 main*
-rw-rw-r-- 1 root root  122 Jun  7 20:51 main.c
-rw-rw-r-- 1 root root   23 Jun  7 21:06 main.d
-rw-rw-r-- 1 root root 1528 Jun  7 21:06 main.o
-rw-rw-r-- 1 root root  119 Jun  7 21:05 Makefile

$ ./main  // 执行
NUM = 1

有没发现:多出了一个文件 main.d,该文件内容是:

main.o: main.c hello.h

这个文件正是因为 Makefile 中的 -MMD 这个参数导致生成的,而它的内容正是我们需要的目标文件依赖信息。

然后在 Makefile 中,include 这个 .d 文件,从而让 make 知道:main.o 文件依赖于 main.c 和 hello.o 这 2 个文件。

这个时候,我们再来修改 hello.h 中的内容,例如:把 NUM 改成 10,再次编译、执行:

$ make
gcc main.c -c -MMD -o main.o
gcc -o main main.o

$ ./main
NUM = 10

Bingo,结果正确!



 
关键词: 文件 指令 头文件

[ 智能网搜索 ]  [ 打印本文 ]  [ 违规举报

猜你喜欢

 
推荐图文
ITECH直流电源在人工智能领域的应用 基于朴素贝叶斯自动过滤垃圾广告
2020年是人工智能相关业务发展的重要一年 我国人工智能市场规模、行业短板、发展前景一览
推荐智能网
点击排行

 
 
新能源网 | 锂电网 | 智能网 | 环保设备网 | 联系方式