makefile,帮忙,有点难!

jolyalansunrain 2005-11-10 04:52:04
我在工程目录下有如下组织的文件:
src/file1.c file2.c file3.c
inc/file1.h file2.h file3.h
x.c
x.h
makefile
.
.
.

请问如何写这个makefile,当src或inc中任意一个文件修改,或x.c、x.h其中之一改变后,都要重新编译x.c得到x.o,怎么办?
...全文
264 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
jolyalansunrain 2005-11-14
  • 打赏
  • 举报
回复
我也想用通配符来做,但不知怎么写,请赐教。
jolyalansunrain 2005-11-14
  • 打赏
  • 举报
回复
哦,谢谢。高手,在哪里?
deutsch 2005-11-12
  • 打赏
  • 举报
回复
推荐一本书
Managing Projects with GNU Make, Third Edition
by Robert Mecklenburg
Copyright . 2005, 1991, 1986 O’Reilly Media, Inc. All rights reserved.
在o'reilly的opensource有免费下载的全书。写makefile必备
chuanzhu 2005-11-11
  • 打赏
  • 举报
回复
可能用通配符*来解决。具体问高手吧!
analyser2003 2005-11-11
  • 打赏
  • 举报
回复
9494
yindesheng 2005-11-11
  • 打赏
  • 举报
回复
或x.c、x.h其中之一改变后,都要重新编译x.c得到新的x.o
===============================
x.o:x.c x.h
gcc -c x.c -o x.o
tengulre 2005-11-11
  • 打赏
  • 举报
回复
up
------------------------------------------------
可以接收传真、短信、语音、电子邮件的邮件系统.
欢迎去免费注册帐号。
http://www.megamail.com.cn
西部Linux联盟
http://www.westlinux.org
jolyalansunrain 2005-11-11
  • 打赏
  • 举报
回复
这样吧,我可能说得不太清楚:
我在工程目录下有如下组织的文件:
src/file1.c file2.c file3.c.....filex.c
inc/file1.h file2.h file3.h.....filex.h
1.c......x.c
1.h......x.h
.
.
.
makefile

请问如何写这个makefile,当src或inc中任意一个文件修改,或x.c、x.h其中之一改变后,都要重新编译x.c得到新的x.o,怎么办?像jwzhouVC() ( ) 那样当src、inc中某个文件修改了,make只会去重编file1.o file2.o file3.o.....filex.o,不会去编x.o,x.o不是最新的,连接不会通过的。怎么办?bekars(涡轮增压) 的我不是很懂呀。
jwzhouVC 2005-11-10
  • 打赏
  • 举报
回复
all:x
x:x.o file1.o file2.o file3.o
gcc -o x x.o file1.o file2.o file3.o
x.o:x.c
gcc -c -I. x.c
file1.o:./src/file1.c
gcc -c -I. -I./inc ./src/file1.c
file2.o:src/file2.c
gcc -c -I. -I./inc ./src/file2.c
file3.o:./src/file3.c
gcc -c -I. -I./inc ./src/file3.c
clean:
rm -rf *.o
rm -rf ./src/*.o
rm -rf x
bekars 2005-11-10
  • 打赏
  • 举报
回复
x.o依赖所有需要的文件,这些文件变动,make都会编译变化的文件的。

看一个Makefile的实现:

CC = gcc
INCLUDES = -I.
CFLAGS = -g -O2 $(INCLUDES) \
-Wall -Wunused -Wstrict-prototypes
DEFS =
COMPILE = $(CC) $(CFLAGS) $(DEFS)

OBJS = memory.o utils.o notify.o timer.o scheduler.o \
vector.o list.o html.o parser.o watchdog.o

HEADERS = $(OBJS:.o=.h)

.c.o:
$(COMPILE) -c $<

all: $(OBJS)

clean:
rm -f *.a *.o *~

distclean: clean
rm -f Makefile

memory.o: memory.c memory.h
utils.o: utils.c utils.h
notify.o: notify.c notify.h
timer.o: timer.c timer.h
scheduler.o: scheduler.c scheduler.h memory.h utils.h
vector.o: vector.c vector.h memory.h
list.o: list.c list.h memory.h
html.o: html.c html.h memory.h
parser.o: parser.c parser.h memory.h
watchdog.o: watchdog.c watchdog.h scheduler.h memory.h parser.h
kiron 2005-11-10
  • 打赏
  • 举报
回复
x.o: x.c x.h
[TAB]gcc -c x.c -I.

23,107

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧