Chinaunix首页 | 论坛 | 博客
  • 博客访问: 621627
  • 博文数量: 166
  • 博客积分: 970
  • 博客等级: 准尉
  • 技术积分: 547
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-06 15:16
个人简介

Believe youself!

文章分类

全部博文(166)

文章存档

2017年(1)

2016年(5)

2015年(117)

2014年(14)

2013年(11)

2012年(5)

2010年(4)

2009年(1)

2008年(8)

我的朋友

分类: LINUX

2013-12-27 07:45:05

先有
autobj =  a.o b.o c.o
all_dir =src src/common src/core src/engine
SRC_DIR =src/
OBJ_DIR=obj/
然后有:
$(foreach file,$(autobj:.o=.cpp),$(foreach dir,$(all_dir),$(subst $(SRC_DIR),$(OBJ_DIR),$(firstword $(subst .cpp,.o,$(wildcard $(SRC_DIR)$(dir)/$(file)))))))

解释:
1:foreach file,$(autobj:.o=.cpp)这半句的意思是,从上面autobj里头取每一个.o文件,将后缀改成.c;
2:$(foreach dir,$(all_dir),$(subst $(SRC_DIR),$(OBJ_DIR)这半句意思是,从all_dir把路径取出来,将字符串替换,src/将替换成obj/
3:$(firstword $(subst .cpp,.o,$(wildcard $(SRC_DIR)$(dir)/$(file))))))) 这半句是利用wildcard从目录下提取这个.cpp文件,如果有就返回.cpp文件带目录的文件名,如果没有就返回空,然后再将返回的文件名.cpp 替换成.o,然后再提供这个这个字符串的第一个字给上一层替换;

最后,这个整个效果是,给定一堆.o文件名,给定一堆的目录,如果在某个目录下具有该.o对应的.cpp文件,则返回这个点.cpp文件的长路径名,这样就可以自动搜索目录,写makefile就去掉了一些繁琐,对于大工程复杂目录,方便很多
阅读(1605) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~