当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 6 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 请达人帮忙把这条编译语句转换成makefile语法[已解决]
帖子发表于 : 2010-07-04 17:23 

注册: 2009-11-19 10:40
帖子: 315
送出感谢: 0 次
接收感谢: 1
直接执行这条语句可以gcc -o client client.c lib/tcp_connect.c lib/readn.c lib/error.c
但我想把它写在makefile里,我的做法如下,请高手修改

目录结构
代码:
/
  client.c
/lib
      tcp_connect.c
      readn.c
      error.c


我想在/和/lib下分别建一个makefile文件,在根目录使用make 就可以生成client文件
我写的makefile文件,请更改
/目录的makefile:
代码:
CC=gcc
FLAGS=-Ilib
client: client.c lib/tcp_connect.o lib/readn.o lib/error.o
   ${CC} -o client client.c $(FLAGS)

/lib目录的makefile
代码:
CC=gcc
LIBS_OBJ=tcp_connect.o readn.o error.o

all: $(LIBS_OBJ):%.o:%.c
   ${CC} -c $<-o $@

我想在根目录下执行make client就生成 client文件,请问这两个makefile文件应该怎样修改呢?
如果能够将这三个.o文件生成为libxxx.a库文件,然后编译client.o时直接调用这个libxxx.a文件更好,请问这样的 makefile又应该怎样写呢?


最后由 basncy 编辑于 2010-07-05 0:34,总共编辑了 1 次

页首
 用户资料  
 
2 楼 
 文章标题 : Re: 请达人帮忙把这条编译语句转换成makefile语法
帖子发表于 : 2010-07-04 18:56 
头像

注册: 2008-12-24 12:02
帖子: 108
送出感谢: 1
接收感谢: 4
你太偷懶了吧,這樣的問題看看書馬上能解決。

不管你的文件放哪裡,只要是
./client.c
./lib/**
這樣的,用下面的Makefile:
在 ./ 下

代码:
NameLibs:= tcp_connect.o readn.o error.o
libs:= $(foreach tmp, $(NameLibs), lib/$(tmp))

client: client.c $(libs)
   cc -o $@ $< $(libs)


這樣就可以了,lib目錄下用不到 Makefile ,gmake的自動推導就會自動處理的。
如果你用的不是gmake, 不夠智能,那麼就把上面的 Makefile 改成
代码:
NameLibs:= tcp_connect.o readn.o error.o
libs:= $(foreach tmp, $(NameLibs), lib/$(tmp))
export NameLibs  #傳遞給嵌套執行的 Makefile

client: client.c $(libs)
   cc -o $@ $< $(libs)

$(libs):
   cd lib;make


並在 lib 下增加一個 Makefile
代码:
ALL: $(NameLibs)

%.o:%.c
   gcc -c -o $@ $<


_________________
機器生命


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 请达人帮忙把这条编译语句转换成makefile语法
帖子发表于 : 2010-07-04 20:39 

注册: 2009-11-19 10:40
帖子: 315
送出感谢: 0 次
接收感谢: 1
client.c 还是报错。。说没有定义函数(这些函数在lib/*.c里面实现的),难道还在要client.c包含的头文件里给这些函数定义?


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 请达人帮忙把这条编译语句转换成makefile语法
帖子发表于 : 2010-07-04 22:02 
头像

注册: 2008-12-24 12:02
帖子: 108
送出感谢: 1
接收感谢: 4
ls的問題不說了。
說下庫
在 lib 目錄下的Makefile里
代码:
libclient.a: $(NameLibs)
   ar rv libclient.a $(NameLibs)

%.o:%.c
   gcc -c -o $@ $<


在 ./ 下的Makefile里
代码:
NameLibs:= tcp_connect.o readn.o error.o
libs:= $(foreach tmp, $(NameLibs), lib/$(tmp))
export NameLibs  #傳遞給嵌套執行的 Makefile

client: client.c lib/libclient.a
   cc -Llib -lclient -static -o $@ $< lib/libclient.a

lib/libclient.a: $(libs)
   cd lib;make


_________________
機器生命


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 请达人帮忙把这条编译语句转换成makefile语法
帖子发表于 : 2010-07-04 22:14 
头像

注册: 2008-12-24 12:02
帖子: 108
送出感谢: 1
接收感谢: 4
論壇程式有問題, 即使包着 [code /code] tab 也不能正常顯示,居然變成空格了。

另外,此主題太水了
建議版主把此主題扔到归档区


_________________
機器生命


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 请达人帮忙把这条编译语句转换成makefile语法
帖子发表于 : 2010-07-05 0:34 

注册: 2009-11-19 10:40
帖子: 315
送出感谢: 0 次
接收感谢: 1
非常感谢,回去再看看


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

当前时区为 UTC + 8 小时


在线用户

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


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

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

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