免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4735 | 回复: 16
打印 上一主题 下一主题

多级Makefile [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-27 18:39 |只看该作者 |倒序浏览
程序代码最终组装成类似文件目录树的形式。
一般有main函数的文件放在顶层。
但是我发现顶层的Makefile中
对于目标可执行程序的规则就不好弄了
main:main.o a.o b.o c.o
.....
但是a.o b.o c.o分别又位于其他的文件夹下,如果这样的话,还不如在其他的文件夹下的Makefile写的时候,让.o文件最终放在和main.c相同文件夹下。
不知各位还有什么高见。谢谢

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
2 [报告]
发表于 2010-01-27 19:38 |只看该作者
根据个人习惯了
我一般是按照功能模块分成各个目录,最后把该目录下的.o打包成.a,然后最后链接的时候,链接各个目录下的.a

有的时候也可以在根目录下直接写一个Makefile
里面的OBJS变量存放各个目录下的.o,用makefile默认规则来生成.o,然后链接成一个问题
比如

  1. TOPDIR=$(shell pwd)
复制代码

然后各个目录下的Makefile里写上

  1. OBJS += \
  2.        $(TOPDIR)/a/a.o\
  3.        $(TOPDIR)/b/b.o\
  4.        $(TOPDIR)/c/c.o
复制代码


这里代码修改了一下,主要是为了把子目录下的.o放在OBJS里

然后在跟目录下的Makefile里写

  1. all:
  2.      make -c a/
复制代码

这样就可以了

仅仅是大概的举个例子
我记得C语言版块有几篇很老的帖子,教如何写Makefile的

[ 本帖最后由 T-Bagwell 于 2010-1-28 17:29 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2010-01-28 15:52 |只看该作者
T-Bagwell 大侠在找工作??

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
4 [报告]
发表于 2010-01-28 16:19 |只看该作者
原帖由 snail_314 于 2010-1-28 15:52 发表
T-Bagwell 在找工作??

是啊,在找工作,由于自己技术不行,所以不好找啊

论坛徽章:
0
5 [报告]
发表于 2010-01-28 17:22 |只看该作者

回复 #4 T-Bagwell 的帖子

这话谦虚了。不过话说回来,找工作确实技术大概只占的了5成的样子,可能都多了,更多的是像名校效应啊之类的东西。毕竟像你肯定不光是想找个工作而已,要进好公司,就是这样,唉。

论坛徽章:
0
6 [报告]
发表于 2010-01-28 17:24 |只看该作者
原帖由 T-Bagwell 于 2010-1-27 19:38 发表
根据个人习惯了
我一般是按照功能模块分成各个目录,最后吧该目录下的.o打包成.a,然后最后链接的时候,链接各个目录下的.a

有的时候也可以在根目录下直接写一个Makefile
里面的OBJS变量存放各个目录下的.o,用 ...



恩。谢谢,现在觉得一个好的Makefile非常重要,减少了好多工作。。

论坛徽章:
0
7 [报告]
发表于 2010-01-29 14:09 |只看该作者
原帖由 T-Bagwell 于 2010-1-27 19:38 发表
根据个人习惯了
我一般是按照功能模块分成各个目录,最后把该目录下的.o打包成.a,然后最后链接的时候,链接各个目录下的.a

有的时候也可以在根目录下直接写一个Makefile
里面的OBJS变量存放各个目录下的.o,用 ...

版主,感谢。
我发现连接.a文件是个好办法。呵呵。

论坛徽章:
1
射手座
日期:2014-08-04 16:49:43
8 [报告]
发表于 2010-01-29 16:06 |只看该作者
all: main.o stack.o
        gcc main.o stack.o -o app
        mv main.o obj/main.o
stack.o:  stack.c
        gcc stack.c -c
main.o: main.c stack.h
        gcc main.c -c
clean:
        rm *.o app
.PHONY: clean

这是我的 Makefile 非常简单的设置你可以看一下  你可以设置路径的保存.o文件

论坛徽章:
2
摩羯座
日期:2013-10-10 14:29:04天蝎座
日期:2014-01-03 09:14:49
9 [报告]
发表于 2010-01-29 16:15 |只看该作者
用automake,挺好使。

论坛徽章:
0
10 [报告]
发表于 2010-01-29 16:46 |只看该作者
原帖由 hanzhenlll 于 2010-1-29 16:06 发表
all: main.o stack.o
        gcc main.o stack.o -o app
        mv main.o obj/main.o
stack.o:  stack.c
        gcc stack.c -c
main.o: main.c stack.h
        gcc main.c -c
clean:
        rm *.o app
.PHONY: clean

这是我的 ...


恩,感谢,我试试。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP