发信人: Gameplayer (......), 信区: LinuxDev
标 题: [合集] Makefile中如何自动处理对头文件的依赖?
发信站: 水木社区 (Tue Dec 15 21:13:44 2009), 站内
☆─────────────────────────────────────☆
reve (dream|如果还有明天) 于 (Wed Mar 7 12:01:35 2007) 提到:
一组源代码:app1.c app2.c ...
都include一个util.h
Makefile中如何自动加入对util.h的依赖?一个个写倒是可以,但是觉得
太麻烦:
app1: app1.c util.h
gcc $(CFLAGS) -o app1 app1.c
app2: app2.c util.h
gcc $(CFLAGS) -o app2 app2.c
...
如果在上面的依赖中去掉util.h的话,更改util.h不会导致重新编译。
请问如何处理可以比较自动化呢?也就是根据app.c里面的#include "util.h"来自动
判断依赖关系。
谢谢!
☆─────────────────────────────────────☆
loveCAD (cad) 于 (Wed Mar 7 12:27:47 2007) 提到:
直接在Makefile里边写上
-include util.h不知道可以不?
【 在 reve (dream|如果还有明天) 的大作中提到: 】
: 一组源代码:app1.c app2.c ... : 都include一个util.h : Makefile中如何自动加入对util.h的依赖?一个个写倒是可以,但是觉得 : ................... ☆─────────────────────────────────────☆
overcomeunic (功夫茶) 于 (Wed Mar 7 13:28:14 2007) 提到:
INCLUDES = -I/xxx/xx/util.h
.c.o:
gcc $^ $(INCLUDES) -o $@
【 在 reve (dream|如果还有明天) 的大作中提到: 】
: 一组源代码:app1.c app2.c ... : 都include一个util.h : Makefile中如何自动加入对util.h的依赖?一个个写倒是可以,但是觉得 : ................... ☆─────────────────────────────────────☆
llky (一辈子不分开) 于 (Wed Mar 7 13:41:13 2007) 提到:
【 在 overcomeunic (功夫茶) 的大作中提到: 】
: 标 题: Re: Makefile中如何自动处理对头文件的依赖? : 发信站: 水木社区 (Wed Mar 7 13:28:14 2007), 站内 : : INCLUDES = -I/xxx/xx/util.h 首先-I这个选项你用错了
: .c.o: : gcc $^ $(INCLUDES) -o $@ 其次,这样写Makefile仍旧不知道.o对.h的依赖关系(改变.h时,并不会重新编译)
: 【 在 reve (dream|如果还有明天) 的大作中提到: 】 : : 一组源代码:app1.c app2.c ... : : 都include一个util.h : : Makefile中如何自动加入对util.h的依赖?一个个写倒是可以,但是觉得 : : ................... : : : : -- : : ※ 来源:·水木社区 http://newsmth.net·[FROM: 59.42.126.*] ☆─────────────────────────────────────☆
overcomeunic (功夫茶) 于 (Wed Mar 7 13:53:18 2007) 提到:
1、-_-,是我错了,只是路径,把.h也给稍带进去了
2、的确是这样的,有什么办法吗?
【 在 llky (一辈子不分开) 的大作中提到: 】
: 首先-I这个选项你用错了 : 其次,这样写Makefile仍旧不知道.o对.h的依赖关系(改变.h时,并不会重新编译) ☆─────────────────────────────────────☆
reve (dream|如果还有明天) 于 (Wed Mar 7 14:00:51 2007) 提到:
不work :)
【 在 loveCAD (cad) 的大作中提到: 】
: 直接在Makefile里边写上 : -include util.h不知道可以不? ☆─────────────────────────────────────☆
doser (十三天恋情◎Feel your Heart) 于 (Wed Mar 7 14:02:33 2007) 提到:
gcc -MMD 可以自动生成头文件的依赖
【 在 overcomeunic (功夫茶) 的大作中提到: 】
1、-_-,是我错了,只是路径,把.h也给稍带进去了
2、的确是这样的,有什么办法吗?
【 在 llky (一辈子不分开) 的大作中提到: 】
: 首先-I这个选项你用错了 : 其次,这样写Makefile仍旧不知道.o对.h的依赖关系(改变.h时,并不会重新编译) ☆─────────────────────────────────────☆
reve (dream|如果还有明天) 于 (Wed Mar 7 14:16:53 2007) 提到:
如何用?加入CFLAGS?
gcc -MMD app1.c -o app1
更新头文件不work
【 在 doser (十三天恋情◎Feel your Heart) 的大作中提到: 】
: gcc -MMD 可以自动生成头文件的依赖 : 1、-_-,是我错了,只是路径,把.h也给稍带进去了 : 2、的确是这样的,有什么办法吗? : ................... ☆─────────────────────────────────────☆
gcc296 (VisualFool.net) 于 (Wed Mar 7 14:18:11 2007) 提到:
用gcc的-MD参数生成.d文件,然后include进入Makefile。George Foot的Generic
Makefile有个实现:
DEPS := $(patsubst %.o,%.d,$(OBJS))
MISSING_DEPS := $(filter-out $(wildcard $(DEPS)),$(DEPS))
MISSING_DEPS_SOURCES := $(wildcard $(patsubst %.d,%.c,$(MISSING_DEPS)) \
$(patsubst %.d,%.cc,$(MISSING_DEPS)))
CPPFLAGS += -MD
.PHONY : deps
deps : $(DEPS)
ifneq ($(MISSING_DEPS),)
$(MISSING_DEPS) :
@$(RM-F) $(patsubst %.d,%.o,$@)
endif
-include $(DEPS)
【 在 reve (dream|如果还有明天) 的大作中提到: 】
: 一组源代码:app1.c app2.c ... : 都include一个util.h : Makefile中如何自动加入对util.h的依赖?一个个写倒是可以,但是觉得 : ................... ☆─────────────────────────────────────☆
llky (一辈子不分开) 于 (Wed Mar 7 14:47:15 2007) 提到:
在info make->Rules->Automatic Prerequisites中也有一段类似的说明
不过有个问题啊,为什么你给的例子中include前要个减号,我从来都是直接写include阿
【 在 gcc296 (VisualFool.net) 的大作中提到: 】
: 标 题: Re: Makefile中如何自动处理对头文件的依赖? : 发信站: 水木社区 (Wed Mar 7 14:18:11 2007), 站内 : : 用gcc的-MD参数生成.d文件,然后include进入Makefile。George Foot的Generic : Makefile有个实现: : : DEPS := $(patsubst %.o,%.d,$(OBJS)) : MISSING_DEPS := $(filter-out $(wildcard $(DEPS)),$(DEPS)) : MISSING_DEPS_SOURCES := $(wildcard $(patsubst %.d,%.c,$(MISSING_DEPS)) \ : $(patsubst %.d,%.cc,$(MISSING_DEPS))) : CPPFLAGS += -MD : : .PHONY : deps : : deps : $(DEPS) : : ifneq ($(MISSING_DEPS),) : $(MISSING_DEPS) : : @$(RM-F) $(patsubst %.d,%.o,$@) : endif : : -include $(DEPS) : : 【 在 reve (dream|如果还有明天) 的大作中提到: 】 : : 一组源代码:app1.c app2.c ... : : 都include一个util.h : : Makefile中如何自动加入对util.h的依赖?一个个写倒是可以,但是觉得 : : ................... : : -- : : 造物主可没有闲情找来几千匹白马然后在每匹身上画上26条黑线 : : : ※ 修改:·gcc296 于 Mar 7 14:19:20 修改本文·[FROM: 218.22.21.*] : ※ 来源:·水木社区 newsmth.net·[FROM: 218.22.21.*] ☆─────────────────────────────────────☆
gcc296 (VisualFool.net) 于 (Wed Mar 7 14:56:34 2007) 提到:
From info of GNU make:
If you want `make' to simply ignore a makefile which does not exist
and cannot be remade, with no error message, use the `-include'
directive instead of `include', like this:
-include FILENAMES...
This acts like `include' in every way except that there is no error
(not even a warning) if any of the FILENAMES do not exist. For
compatibility with some other `make' implementations, `sinclude' is
another name for `-include'.
【 在 llky (一辈子不分开) 的大作中提到: 】
: 在info make->Rules->Automatic Prerequisites中也有一段类似的说明 : 不过有个问题啊,为什么你给的例子中include前要个减号,我从来都是直接写include阿 ☆─────────────────────────────────────☆
overcomeunic (功夫茶) 于 (Wed Mar 7 17:56:15 2007) 提到:
谢~
【 在 doser (十三天恋情◎Feel your Heart) 的大作中提到: 】
: gcc -MMD 可以自动生成头文件的依赖 : 1、-_-,是我错了,只是路径,把.h也给稍带进去了 : 2、的确是这样的,有什么办法吗? ☆─────────────────────────────────────☆
cybereagle (2/3的沉默@XMUCSD) 于 (Wed Mar 7 20:26:17 2007) 提到:
%.o:%.c util.h
改写默认规则
或者
OBJS = app1.o app2.o ...
$(OBJS): util.h
【 在 overcomeunic (功夫茶) 的大作中提到: 】
: 1、-_-,是我错了,只是路径,把.h也给稍带进去了 : 2、的确是这样的,有什么办法吗? ☆─────────────────────────────────────☆
reve (dream|如果还有明天) 于 (Thu Mar 8 00:51:25 2007) 提到:
【 在 cybereagle (2/3的沉默@XMUCSD) 的大作中提到: 】
: %.o:%.c util.h : 改写默认规则 没有试成功──不是说默认的推理规则不能再定义依赖关系么?
而且我见的默认规则是这个样子的:
.c.o:
$(CC) -c -Wall $(CFLAGS) $< -o $@
: 或者 : ................... 这个试成功了,thanks :)
☆─────────────────────────────────────☆
cybereagle (2/3的沉默@XMUCSD) 于 (Thu Mar 8 00:58:12 2007) 提到:
%.o:%.c util.h
$(CC) -c -Wall $(CFLAGS) $^ -o $@
这样写我这边是可以的
【 在 reve (dream|如果还有明天) 的大作中提到: 】
: 没有试成功──不是说默认的推理规则不能再定义依赖关系么? : 而且我见的默认规则是这个样子的: : .c.o: : ................... ☆─────────────────────────────────────☆
reve (dream|如果还有明天) 于 (Thu Mar 8 01:34:32 2007) 提到:
【 在 cybereagle (2/3的沉默@XMUCSD) 的大作中提到: 】
: %.o:%.c util.h : $(CC) -c -Wall $(CFLAGS) $^ -o $@ $<
: 这样写我这边是可以的 : ................... 谢谢,这样可以了:
%.o:%.c util.h
$(CC) -c $(CFLAGS) $< -o $@
%:%.o
$(CC) $(LDFLAGS) -o $@ $<
☆─────────────────────────────────────☆
cybereagle (2/3的沉默@XMUCSD) 于 (Thu Mar 8 02:08:23 2007) 提到:
【 在 reve (dream|如果还有明天) 的大作中提到: 】
: $< 啊,对,晕了……你是要放.h
: 谢谢,这样可以了: : %.o:%.c util.h : $(CC) -c $(CFLAGS) $< -o $@ 下面的跟默认一样就不用写了
: %:%.o : $(CC) $(LDFLAGS) -o $@ $< ☆─────────────────────────────────────☆
blippman (blippman) 于 (Wed Jun 27 12:27:53 2007) 提到:
【 在 gcc296 (VisualFool.net) 的大作中提到: 】
: 用gcc的-MD参数生成.d文件,然后include进入Makefile。George Foot的Generic : Makefile有个实现: : DEPS := $(patsubst %.o,%.d,$(OBJS)) : ................... 如果加上如下Target:
clean : FORCE
rm -f $(DEPS)
rm -f $(OBJS)
FORCE :
由于使用-include包含了$(DEPS)文件, 即使 make clean 也会首先生成dep 文件.
有什么办法可以避免这种行为吗?
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。