posts - 25,  comments - 21,  trackbacks - 0
先有
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就去掉了一些繁琐,对于大工程复杂目录,方便很多
                 

posted on 2009-04-12 09:10 Sherk 阅读(4529) 评论(0)  编辑 收藏 引用
只有注册用户登录后才能发表评论。
<2024年12月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

常用链接

留言簿(3)

随笔档案

相册

好友

搜索

  •  

最新评论

阅读排行榜

评论排行榜