whutxuan
驱动小牛
驱动小牛
  • 注册日期2002-03-05
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:2368回复:20

写Makefile的问题!

楼主#
更多 发布于:2002-11-13 17:14
请教大家一个写Makefile文件时候,如果我的a.c文件中包含了func(),func()是在b.c文件中定义,而b.c文件中有包含着其他.c文件中的函数func1(),funcc2()...依此类推,如果一一列举出来,将是一个非常大的工作量。不知道有什么办法可以减轻这个工作量。
我的意思是写
obj = a.o b.o c.o e.o................
要是.o 有几百个,也要写下去吗?



最新喜欢:

dzyseudzyseu
unix1998
驱动老牛
驱动老牛
  • 注册日期2002-05-08
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-11-15 11:37
如果你想找这些函数的关系,可以用sourceinsight一层一层的跟。这种发法我觉得不累了。

另外,一个工程不是一个makefile的。你说目录多,可是每个目录下都有makefile的。最高层的只要包括下层目录名,就可以了。
如果工程很大,没有automake我可能没有办法。
现在即使只有2个文件我都用makefile.
whutxuan
驱动小牛
驱动小牛
  • 注册日期2002-03-05
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-11-15 11:21
to unix1998:
  如果是你,没有automake,你会怎么做呢?
whutxuan
驱动小牛
驱动小牛
  • 注册日期2002-03-05
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-11-15 10:51
没有明白你的意思!这和extern有什么关系呢?
好象你的意思是要用手动的办法去寻找,这和grep funct *.c 根本没有什么区别,这样工作量很大,有没有类似我刚才写的帖子那样,寻找到.c文件。
unix1998
驱动老牛
驱动老牛
  • 注册日期2002-05-08
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-11-15 10:40
不能。函数里有extern啊。
whutxuan
驱动小牛
驱动小牛
  • 注册日期2002-03-05
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-11-15 10:35
简单的说,我想知道b.c文件中用到的函数是在哪些文件.c文件里实现的,而这些.c文件里用到的函数又是在哪些.c文件里实现的。依此类推。用Make可以实现这些吗?(当然不是autoconf)
unix1998
驱动老牛
驱动老牛
  • 注册日期2002-05-08
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-11-15 10:08
据我所知,makefile不去考虑.h文件。
只是根据config的内容,选中.o
这些.o会去找相关的.c的。

sorry,因为我没太理解你最后问题的意思,所以不知道怎么回答。
whutxuan
驱动小牛
驱动小牛
  • 注册日期2002-03-05
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
7楼#
发布于: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
whutxuan
驱动小牛
驱动小牛
  • 注册日期2002-03-05
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-11-15 09:51
make dep只能列举出以来的.h文件。一个头文件可以对应着几个.c文件,也就可以对应着几个.o文件。.
可是我在link的时候:比如:
obj:a.o b.o(还有我不知道的,怎么把它们列举出来。)
   gcc $(CFLAGS) test $(obj)
unix1998
驱动老牛
驱动老牛
  • 注册日期2002-05-08
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-11-15 08:40
现在的问题是a文件依赖于b,b文件的依赖文件我不知道,只能通过link的时候提示出错,来把依赖文件加上去,这样依赖文件又有它自己的以来文件,link的时候又提示出错,如此循环把人都搞死了。
 

可是有make dep的命令啊。
whutxuan
驱动小牛
驱动小牛
  • 注册日期2002-03-05
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-11-15 08:37
现在的问题是a文件依赖于b,b文件的依赖文件我不知道,只能通过link的时候提示出错,来把依赖文件加上去,这样依赖文件又有它自己的以来文件,link的时候又提示出错,如此循环把人都搞死了。
tigerzd
驱动老牛
驱动老牛
  • 注册日期2001-08-25
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-11-14 17:53
你以为计算机有多聪明?!首先你的文件就散乱:
“问题是这些.o文件分散各个目录下呀,我也不可能把它们考到同一个目录下。太多了!!!”
这就决定了编译工作不简单。不管什么方法。
犯强汉者,虽远必诛! [img]http://www.driverdevelop.com/forum/upload/tigerzd/2002-12-13_sf10.JPG[/img]
unix1998
驱动老牛
驱动老牛
  • 注册日期2002-05-08
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-11-14 16:47
我觉得makefile这方法挺好,其他办法我也不知道。
whutxuan
驱动小牛
驱动小牛
  • 注册日期2002-03-05
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2002-11-14 16:41
我还是不想用那种办法。有没有其他办法!
unix1998
驱动老牛
驱动老牛
  • 注册日期2002-05-08
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2002-11-14 15:35
就算你自己一个一个的写,也不保证depend的正确性,还要是要等到make的时候提醒你啊。
所以应该是的。不过一般也不会出什么错。
一般makefile是根据你configure生成的。所以你只是要了解configure的内容。
说了这么多,给20分吧 :D :D :D
whutxuan
驱动小牛
驱动小牛
  • 注册日期2002-03-05
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2002-11-14 12:39
我知道系统会提醒,难道要等到系统提醒了,去修改 Makefile吗,然后在提醒,再改吗???
unix1998
驱动老牛
驱动老牛
  • 注册日期2002-05-08
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2002-11-14 12:12
系统会提示你少那个东西的。放心好了。
whutxuan
驱动小牛
驱动小牛
  • 注册日期2002-03-05
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2002-11-14 11:31
用机器生成的东西,到时候出了问题,也不知道哪个环节有毛病。
如果a依赖于b,当时b的依赖文件不知道,这个时候应该怎么处理呢?
unix1998
驱动老牛
驱动老牛
  • 注册日期2002-05-08
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2002-11-14 09:05
看automake,autoconf.
这些软件就是完成这些功能的。
whutxuan
驱动小牛
驱动小牛
  • 注册日期2002-03-05
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2002-11-14 08:42
问题是这些.o文件分散各个目录下呀,我也不可能把它们考到同一个目录下。太多了!!!
上一页
游客

返回顶部