阅读:2367回复:20
写Makefile的问题!
请教大家一个写Makefile文件时候,如果我的a.c文件中包含了func(),func()是在b.c文件中定义,而b.c文件中有包含着其他.c文件中的函数func1(),funcc2()...依此类推,如果一一列举出来,将是一个非常大的工作量。不知道有什么办法可以减轻这个工作量。
我的意思是写 obj = a.o b.o c.o e.o................ 要是.o 有几百个,也要写下去吗? |
|
最新喜欢:![]() |
沙发#
发布于:2002-11-13 22:53
do like this: .c.o : $(CC) $(CFLAGS) $(INCDIRS) -c $< |
|
板凳#
发布于:2002-11-14 08:42
问题是这些.o文件分散各个目录下呀,我也不可能把它们考到同一个目录下。太多了!!!
|
|
地板#
发布于:2002-11-14 09:05
看automake,autoconf.
这些软件就是完成这些功能的。 |
|
地下室#
发布于:2002-11-14 11:31
用机器生成的东西,到时候出了问题,也不知道哪个环节有毛病。
如果a依赖于b,当时b的依赖文件不知道,这个时候应该怎么处理呢? |
|
5楼#
发布于:2002-11-14 12:12
系统会提示你少那个东西的。放心好了。
|
|
6楼#
发布于:2002-11-14 12:39
我知道系统会提醒,难道要等到系统提醒了,去修改 Makefile吗,然后在提醒,再改吗???
|
|
7楼#
发布于:2002-11-14 15:35
就算你自己一个一个的写,也不保证depend的正确性,还要是要等到make的时候提醒你啊。
所以应该是的。不过一般也不会出什么错。 一般makefile是根据你configure生成的。所以你只是要了解configure的内容。 说了这么多,给20分吧 :D :D :D |
|
8楼#
发布于:2002-11-14 16:41
我还是不想用那种办法。有没有其他办法!
|
|
9楼#
发布于:2002-11-14 16:47
我觉得makefile这方法挺好,其他办法我也不知道。
|
|
10楼#
发布于:2002-11-14 17:53
你以为计算机有多聪明?!首先你的文件就散乱:
“问题是这些.o文件分散各个目录下呀,我也不可能把它们考到同一个目录下。太多了!!!” 这就决定了编译工作不简单。不管什么方法。 |
|
|
11楼#
发布于:2002-11-15 08:37
现在的问题是a文件依赖于b,b文件的依赖文件我不知道,只能通过link的时候提示出错,来把依赖文件加上去,这样依赖文件又有它自己的以来文件,link的时候又提示出错,如此循环把人都搞死了。
|
|
12楼#
发布于:2002-11-15 08:40
现在的问题是a文件依赖于b,b文件的依赖文件我不知道,只能通过link的时候提示出错,来把依赖文件加上去,这样依赖文件又有它自己的以来文件,link的时候又提示出错,如此循环把人都搞死了。 可是有make dep的命令啊。 |
|
13楼#
发布于:2002-11-15 09:51
make dep只能列举出以来的.h文件。一个头文件可以对应着几个.c文件,也就可以对应着几个.o文件。.
可是我在link的时候:比如: obj:a.o b.o(还有我不知道的,怎么把它们列举出来。) gcc $(CFLAGS) test $(obj) |
|
14楼#
发布于:2002-11-15 09:54
#############################################################################
# A general makefile for static library. # Created by mount0N(mount0N@yahoo.com). 2002.10.12 # # 1, You put all src into the current dir. # your src file name should be .c or .cpp file. # 2, And set compile options and lib name. # 3, make depend # to set src dependency relation at first time and every time you change # dependency relation. # 4, make # Everything is ok. you can make makefile. hehe. # ############################################################################# CC = gcc CWARN = -Wstrict-prototypes -Wall -Wunused CDEFS = CINCS = CFLAGS = $(CWARN) $(CDEFS) $(CINCS) -g -O2 CXXFLAGS = $(CFLAGS) DESTLIB = libxxx.a #LDFLAGS = # Donot change below here. SRCS = $(wildcard *.cpp) $(wildcard *.c) OBJS = $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(SRCS))) DEPEND = makedepend -- $(CPPFLAGS) -- ARFLAGS = cru RUNLIB = ranlib all: $(DESTLIB) $(DESTLIB):$(OBJS) $(AR) $(ARFLAGS) $@ $? $(RUNLIB) $(DESTLIB) depend:$(SRCS) $(DEPEND) $(SRCS) tags:$(SRCS) $(CTAGS) $(SRCS) clean: -rm -f $(DESTLIB) *.o tags core shar 只能列举出.h文件,有没有什么办法把它改为也可以列举出依赖的.c文件因为link的时候需要的是.o不是 .h |
|
15楼#
发布于:2002-11-15 10:08
据我所知,makefile不去考虑.h文件。
只是根据config的内容,选中.o 这些.o会去找相关的.c的。 sorry,因为我没太理解你最后问题的意思,所以不知道怎么回答。 |
|
16楼#
发布于:2002-11-15 10:35
简单的说,我想知道b.c文件中用到的函数是在哪些文件.c文件里实现的,而这些.c文件里用到的函数又是在哪些.c文件里实现的。依此类推。用Make可以实现这些吗?(当然不是autoconf)
|
|
17楼#
发布于:2002-11-15 10:40
不能。函数里有extern啊。
|
|
18楼#
发布于:2002-11-15 10:51
没有明白你的意思!这和extern有什么关系呢?
好象你的意思是要用手动的办法去寻找,这和grep funct *.c 根本没有什么区别,这样工作量很大,有没有类似我刚才写的帖子那样,寻找到.c文件。 |
|
19楼#
发布于:2002-11-15 11:21
to unix1998:
如果是你,没有automake,你会怎么做呢? |
|
上一页
下一页