如何写一个makefile 文件 枚举其子目录下所有makefile 文件并且make 他们 make 的时候可以指定参数
如何写一个makefile 文件 枚举其子目录下所有makefile 文件并且make 他们 make 的时候可以指定参数
------解决方案--------------------dirs := $(shell dir /b /a:d)
subs:
$(foreach N,$(dirs),make -C $(N) &)
这个是我在windows下面的
------解决方案--------------------例如主目录中有子目录1,子目录2,子目录3等等,子目录下分别有其自己的makefile(submakefile1等),主目录中建立makefile,内容如下:
test:
cd ./subdir1 && $(MAKE) -f submakefile1
cd ./subdir2 && $(MAKE) -f submakefile2
cd ./subdir3 && $(MAKE) -f submakefile3
...
主目录中直接make即可
------解决方案--------------------
find . -name "makefile" -o -name "Makefile"
这句话就找到了所有的Makfile,,然后看看语法怎么写了.
------解决方案--------------------
files := $(shell find . -name "makefile" -o -name "Makefile")
#dirs := $(dir $(files))
.PHONY: all
all:
for i in $(files); do make -C `dirname $$i`; done
貌似满足你的要求,你自己根据需要修改下..自己写Makefile机会真不多,
------解决方案--------------------参数应该都在各个Makefile中写好了呀,
或者单用建立一个目录config/Makefile
这个文件里面都是些设置参数的,CXXFLAGS,CFLAGS等等.
然后其余的Makefile都include $(PROJECT_DIR)/config/Makefile,...参数就统一到一个文件中设置了.
http://blog.sina.com.cn/s/blog_6cc850810100r8fr.html
没实践过,你自己试吧
注意,上面的例子没考虑子目录的make顺序.. 考虑make顺序,就得人为指定了.
------解决方案--------------------
make -C `dirname $$i`
上面是个for循环,就对所有的Makefiles执行,然后make -C Makefile所在目录..
加参数的情况不知道,
我上面的例子,我自己测试过没问题.
------解决方案--------------------不知道了,,
------解决方案--------------------
你看看是不是和子目录执行make时的顺序有关,,即子目录中的project是否有相互依赖关系。