打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
[合集] Makefile中如何自动处理对头文件的依赖?
发信人: 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 文件.
  
有什么办法可以避免这种行为吗?
  
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
LinuxSense ? linux make的用法
GUN make 工具
Makefile文件编写
一个简单的通用Makefile实现
makefile编译所有c文件
最简单的通用Makefile
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服