当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 4 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 请懂makefile的帮我看看Makefile错在哪。
帖子发表于 : 2008-04-13 20:59 

注册: 2007-11-20 14:10
帖子: 23
送出感谢: 0 次
接收感谢: 0 次
我的工程文件包含了7个.c文件和7个自己定义的.h文件,.c文件中还include了系统的头文件。
sc@sc-desktop:~/workspace/chord-2$ ls
bin include Makefile Makefile~ src
bin 目录要放我的最终目标文件
include目录存放defin.h server.h client.h common.h chord.h interface.h bash.h
src目录存放main.c bash.c common.c server.c interface.c network.c chord.c

要如何写makefile?请高手来看看!


最后由 linfengfeiye 编辑于 2008-04-14 16:30,总共编辑了 4 次

页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2008-04-14 15:17 

注册: 2007-11-20 14:10
帖子: 23
送出感谢: 0 次
接收感谢: 0 次
代码:
OPTIONS=-c -O3 -Wall
OBJECTS=main.o bash.o common.o server.o interface.o network.o chord.o
#SOURCES=main.c bash.c common.c server.c interface.c network.c chord.c
#MYHEADERS=defin.h server.h client.h common.h chord.h interface.h bash.h
#vpath %.h ./include
#vpath %.h /usr/src/linux-headers-2.6.22-14-generic/include/linux
VPATH=./src:./include:/usr/src/linux-headers-2.6.22-14-generic/include/linux:/usr/include
complete:chord
   @echo "Build complte"
chord:$(OBJECTS)
   $(CC) -o $@ $^ -lptread
   @echo “The executable is in the 'chord' file"
main.o:main.c define.h stdio.h stdlib.h string.h signal.h interface.h
   $(CC) $(OPTIONS) $< -o $@
bash.o:bash.c define.h string.h bash.h stdlib.h
   $(CC) $(OPTIONS) $< -o $@
common.o:common.c define.h common.h bash.h client.h server.h stdio.h stdlib.h string.h unistd.h netdb.h inet.h
   $(CC) $(OPTIONS) $< -o $@
server.o:server.c define.h common.h bash.h client.h server.h stdlib.h string.h stdio.h
   $(CC) $(OPTIONS) $< -o $@
interface.o:interface.c stdio.h stdlib.h string.h semaphore.h pthread.h signal.h unistd.h define.h common.h chord.h server.h client.h interface.h
   $(CC) $(OPTIONS) $< -o $@
network.o:network.c define.h common.h client.h stdio.h stdlib.h string.h inet.h unistd.h netdb.h socket.h
   $(CC) $(OPTIONS) $< -o $@
chord.o:chord.c  define.h common.h chord.h bash.h client.h stdio.h stdlib.h string.h
   $(CC) $(OPTIONS) $< -o $@
clean:
   rm -f *.o *core* chord


sc@sc-desktop:~/workspace/chord-2$ make
make: *** 没有规则可以创建“bash.o”需要的目标“bash.h”。 停止。


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2008-04-14 16:52 

注册: 2007-11-20 14:10
帖子: 23
送出感谢: 0 次
接收感谢: 0 次
问题解决了,是笔误。

代码:
OPTIONS=-c -O3 -Wall -I./include -L /usr/lib
OBJECTS=main.o hash.o common.o server.o interface.o network.o chord.o
#SOURCES=main.c bash.c common.c server.c interface.c network.c chord.c
#MYHEADERS=defin.h server.h client.h common.h chord.h interface.h hash.h
#vpath %.h ./include
#vpath %.h /usr/src/linux-headers-2.6.22-14-generic/include/linux
VPATH=./src:./include:/usr/src/linux-headers-2.6.22-14-generic/include/linux:/usr/include
complete:chord
   rm -f *.o
   mv chord ./bin
   @echo "Build complte"
chord:$(OBJECTS)
   $(CC) -o $@ $^ -lpthread
   @echo "The executable is in the 'chord' file"
main.o:main.c define.h stdio.h stdlib.h string.h signal.h interface.h
   $(CC) $(OPTIONS) $< -o $@
hash.o:bash.c define.h  hash.h string.h stdlib.h
   $(CC) $(OPTIONS) $< -o $@
common.o:common.c define.h common.h hash.h client.h server.h stdio.h stdlib.h string.h unistd.h netdb.h inet.h
   $(CC) $(OPTIONS) $< -o $@
server.o:server.c define.h common.h hash.h client.h server.h stdlib.h string.h stdio.h
   $(CC) $(OPTIONS) $< -o $@
interface.o:interface.c stdio.h stdlib.h string.h semaphore.h pthread.h signal.h unistd.h define.h common.h chord.h server.h client.h interface.h
   $(CC) $(OPTIONS) $< -o $@
network.o:network.c define.h common.h client.h stdio.h stdlib.h string.h inet.h unistd.h netdb.h socket.h
   $(CC) $(OPTIONS) $< -o $@
chord.o:chord.c  define.h common.h chord.h hash.h client.h stdio.h stdlib.h string.h
   $(CC) $(OPTIONS) $< -o $@
clean:
   rm -f *.o
   cd ./bin;rm chord


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2008-04-14 17:39 

注册: 2006-03-10 15:10
帖子: 3182
地址: xi'an China
送出感谢: 0 次
接收感谢: 2
个人观点:
可以将该makefile改写成一个总控makefile文件,内容如下:

代码:
subdir:
   cd src && $(MAKE)


在src目录中再写一个makefile文件,内容如下:
代码:
CFLAGS = -O3 -Wall -I../include
LDFLAGS= -lptread
vpath %.h ../include
OBJECTS=main.o bash.o common.o server.o interface.o network.o chord.o

chord:$(OBJECTS)
   $(CC) -o $@ $^ $(CFLAGS) $(LDFLAGS)
   cp $@ ../bin/
   @echo "Build complte"

main.o: define.h interface.h
bash.o: define.h bash.h
common.o: define.h common.h bash.h client.h server.h
server.o: define.h common.h bash.h client.h server.h
interface.o: define.h common.h chord.h server.h client.h interface.h
network.o: define.h common.h client.h
chord.o: define.h common.h chord.h bash.h client.h

.PHONY : clean
clean :
   -$(RM) $(OBJECTS)


注:该makefile我没有测试,如有错误请指正。


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 4 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译