免费注册 查看新帖 |

Chinaunix

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

【makefile】怎么处理多级目录? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-01 15:47 |只看该作者 |倒序浏览
目录如下:
+src
  |-proj0
     |-program1
     |-program2
  |-proj1
     |-program1
     |-program2
     |-program3
     |-program4
  |-proj3
     |-program1
     |-program2
     |-program3  
   ....
  |-proj9
-Makefile
+include
-README
+lib
  |-lib1
  |-lib2

我src目录下有10个文件夹,名字分别为proj0-proj9,下面分别有program_i若干个子目录,每个program_i目录下是若干个.c文件
我的.h放在了顶层目录平级的include下面

我打算在顶层目录写个makefile,然后一次性编译src下所有的proj下的program下的所有.c文件,然后每个program下面生成一个和文件夹同名的可执行文件。

我不知道怎么处理多级目录(子目录下面没有mk文件,只有gcc生成的.d依赖文件);而且是多个目录。。。

简单看了看手册,感觉没有清晰思路。请大拿指点下,谢谢~

[ 本帖最后由 bigbusyboy 于 2008-4-1 15:50 编辑 ]

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
2 [报告]
发表于 2008-04-01 18:59 |只看该作者
子目录下没有 makefile, 这个就比较麻烦了。。。

论坛徽章:
0
3 [报告]
发表于 2008-04-01 23:59 |只看该作者

如果子目录下有makefile的话,能不能include一个共同的?

我可以添加一个makefile到每个子目录,但是鉴于所有的子目录下的makefile基本上没有区别,怎么才能保证引用相同的规则呢?
最好就是一个文件。

因为如果复制一份到各处的话,要万一有修改那不惨了。。。?

谢谢!

论坛徽章:
0
4 [报告]
发表于 2008-04-02 10:21 |只看该作者
试试加上文件目录行吗??
例如
obj: ../folderName/SourceName.cpp
..................

仅供参考

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
5 [报告]
发表于 2008-04-05 14:05 |只看该作者
原帖由 bigbusyboy 于 2008-4-1 23:59 发表
我可以添加一个makefile到每个子目录,但是鉴于所有的子目录下的makefile基本上没有区别,怎么才能保证引用相同的规则呢?
最好就是一个文件。

嗯,如果你使用 GNU make 的话,在它里面是可以指定源文件搜索路径的(默认为当前目录),看下文档.

论坛徽章:
0
6 [报告]
发表于 2008-04-11 13:18 |只看该作者
方法1. 在每个目录下建立Makefile文件,在最外面的Makefile中cd到指定目录中执行$(MAKE),也是可以加参数的

方法2:就是查找每个需要编译的文件,然后进行编译,下面是一个例子

MW_DIR=$(PWD)
INCLUDE = -I$(MW_DIR)/include
INCLUDE+= -I.
#LIBPATH=-L $(MW_DIR)/lib     //如果有库文件,可以这样指定
#LIB= -lpthread                        //libpthread.a
CC=gcc
CFLAGS=-DHI_DEBUG -g -Wall

//加入内部的头文件
SAMDIR=$(MW_DIR)/src
SAMINCH=$(shell find $(SAMDIR) -name '*.h')
SAMINCDIR=$(dir $(SAMINCH))
INCLUDE+= $(foreach temp,$(SAMINCDIR), -I$(temp))

//查找到需要编译的C文件
SRC=$(shell find $(SAMDIR) -name '*.c')  //子目录的C文件
SRC+=$(wildcard *.c)  //当前目录中的C文件

APP=$(SRC:%.c=%)  //得到AP文件

all  :  $(APP)

$(APP): %: %.c
        $(CC) $(CFLAGS) -o  $@ $< $(INCLUDE) $(LIBPATH) $(LIB)
clean:
         rm -fr $(APP)

[ 本帖最后由 longfang 于 2008-4-11 16:31 编辑 ]

评分

参与人数 1可用积分 +9 收起 理由
MMMIX + 9 我很赞同

查看全部评分

论坛徽章:
0
7 [报告]
发表于 2008-10-28 21:37 |只看该作者

回复 #6 longfang 的帖子

zan!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP