如何写一个makefile 文件 枚举其子目录下所有makefile 文件并且make 他们 make 的时候可以指定参数

xengine-qyt 2013-04-07 04:20:48
如何写一个makefile 文件 枚举其子目录下所有makefile 文件并且make 他们 make 的时候可以指定参数
...全文
398 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
xengine-qyt 2013-04-12
  • 打赏
  • 举报
回复
不行 还是那个问题!
prohibit 2013-04-11
  • 打赏
  • 举报
回复
你就把makefile写成下面这样,试一下能编过不;如果能,再加其他的makefile;如果不能,呃,那真不了解了。。
RELEASE=0
test:
    cd ./NetEngine_Core/NetEngine_Core && $(MAKE) -f Makefile $(RELEASE)
xengine-qyt 2013-04-11
  • 打赏
  • 举报
回复
搞不定啊搞不定啊 2楼的还是提示那个警告 RELEASE = 0 NETCORE_PATH = cd ./NetEngine_Core/NetEngine_Core DATABASE_PATH = cd ./NetEngine_Core/NetEngine_DataBase MAKEFILES = $(MAKE_DATABASE) $(MAKE_NETCORE) .PHONY:MakeAll MakeAll: $(MAKEFILES) MAKE_NETCORE = $(NETCORE_PATH) && make -f Makefile $(RELEASE) MAKE_DATABASE = $(DATABASE_PATH) && make -f Makefile $(RELEASE)
xengine-qyt 2013-04-09
  • 打赏
  • 举报
回复
这个项目没有。这个项目是用TINYXML来弄的,代码都包含了 我单独make编译没问题,用你提供的脚本全部编译的花所有都弹出这个警告!
fdl19881 2013-04-08
  • 打赏
  • 举报
回复
引用 7 楼 aaadddzxc 的回复:
是的,参数我已经写好了,我只是想掉用我下级MAKEFILE的参数而已,比如我RELEASE参数可以指定带不带调试编译 do make -C `dirname $$i`; done 这句话是什么意思? RELEASE = 0 MAKEFILES := $(shell find . -name "makefile" -o -name "Makefile") ……
make -C `dirname $$i` 上面是个for循环,就对所有的Makefiles执行,然后make -C Makefile所在目录.. 加参数的情况不知道, 我上面的例子,我自己测试过没问题.
xengine-qyt 2013-04-08
  • 打赏
  • 举报
回复
是的,参数我已经写好了,我只是想掉用我下级MAKEFILE的参数而已,比如我RELEASE参数可以指定带不带调试编译 do make -C `dirname $$i`; done 这句话是什么意思? RELEASE = 0 MAKEFILES := $(shell find . -name "makefile" -o -name "Makefile") all:$(MAKEFILES) for i in $(files); do make $(RELEASE) `dirname $$i`; done 执行不成功哦呢。。。
fdl19881 2013-04-08
  • 打赏
  • 举报
回复
参数应该都在各个Makefile中写好了呀, 或者单用建立一个目录config/Makefile 这个文件里面都是些设置参数的,CXXFLAGS,CFLAGS等等. 然后其余的Makefile都include $(PROJECT_DIR)/config/Makefile,...参数就统一到一个文件中设置了. http://blog.sina.com.cn/s/blog_6cc850810100r8fr.html 没实践过,你自己试吧 注意,上面的例子没考虑子目录的make顺序.. 考虑make顺序,就得人为指定了.
fdl19881 2013-04-08
  • 打赏
  • 举报
回复

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机会真不多,
fdl19881 2013-04-08
  • 打赏
  • 举报
回复
引用 3 楼 aaadddzxc 的回复:
楼上的你那是一个一个写,如何make 枚举执行呢?
find . -name "makefile" -o -name "Makefile" 这句话就找到了所有的Makfile,,然后看看语法怎么写了.
xengine-qyt 2013-04-08
  • 打赏
  • 举报
回复
楼上的你那是一个一个写,如何make 枚举执行呢?
fdl19881 2013-04-08
  • 打赏
  • 举报
回复
引用 9 楼 aaadddzxc 的回复:
efile:22: 警告:忽略关于目标“all”的旧命令 Makefile:26: 警告:覆盖关于目标“tinystr.o”的命令 ./Makefile:26: 警告:忽略关于目标“tinystr.o”的旧命令 Makefile:28: 警告:覆盖关于目标“tinyxml.o”的命令 ./Makefile:28: 警告:忽略关于目标“tinyxml.o”的旧命令 ……
你看看是不是和子目录执行make时的顺序有关,,即子目录中的project是否有相互依赖关系。
fdl19881 2013-04-08
  • 打赏
  • 举报
回复
不知道了,,
xengine-qyt 2013-04-08
  • 打赏
  • 举报
回复
efile:22: 警告:忽略关于目标“all”的旧命令 Makefile:26: 警告:覆盖关于目标“tinystr.o”的命令 ./Makefile:26: 警告:忽略关于目标“tinystr.o”的旧命令 Makefile:28: 警告:覆盖关于目标“tinyxml.o”的命令 ./Makefile:28: 警告:忽略关于目标“tinyxml.o”的旧命令 Makefile:30: 警告:覆盖关于目标“tinyxmlerror.o”的命令 ./Makefile:30: 警告:忽略关于目标“tinyxmlerror.o”的旧命令 Makefile:32: 警告:覆盖关于目标“tinyxmlparser.o”的命令 ./Makefile:32: 警告:忽略关于目标“tinyxmlparser.o”的旧命令 Makefile:34: 警告:覆盖关于目标“XML_Parse.o”的命令 ./Makefile:34: 警告:忽略关于目标“XML_Parse.o”的旧命令 谈一堆这些出来 什么意思?
prohibit 2013-04-07
  • 打赏
  • 举报
回复
例如主目录中有子目录1,子目录2,子目录3等等,子目录下分别有其自己的makefile(submakefile1等),主目录中建立makefile,内容如下:
test:
	cd ./subdir1 && $(MAKE) -f submakefile1
	cd ./subdir2 && $(MAKE) -f submakefile2
	cd ./subdir3 && $(MAKE) -f submakefile3
    ...
主目录中直接make即可
Snow_Leaf 2013-04-07
  • 打赏
  • 举报
回复
dirs := $(shell dir /b /a:d) subs: $(foreach N,$(dirs),make -C $(N) &) 这个是我在windows下面的
make是在1977年在贝尔实验室(Bell Labs)研发的 Unix系统中的一款依赖关系检查工具程序(Utility software)。make的应用非常广泛,它被用来构建 C、C++ 、Pascal  Fortran 等项目,自动化构建生成可执行文件或者库文件make通过读取Makefile文件以自动化建构软件, 它会根据依赖文件的修改时间进行判断。确定一个target的依赖关系,然后把生成这个target的相关命令传给shell去执行。GNU make 和大多数版本的 make 之间最重要的区别是 GNU make 是自由软件,常和GNU编译系统一起被使用,是大多数GNU Linux安装的一部分。GNU makemakefile 中具有许多强大的功能,超出了其他 make 版本的功能,它还可以重新生成、使用、然后删除不需要保存的中间文件。GNU make 还有一些非常方便的简单功能。例如,选项“假装源文件文件没有更改,即使它已更改。当您向头文件添加新宏时,这非常有用。大多数版本的 make 都会假设它们必须重新编译所有使用头文件的源文件,但是如果您知道对头文件的更改不需要重新编译 GNU make 为您提供了一种避免重新编译的方法-o file 。 黄强老师针对零编程基础的同学,精心打磨make核心知识点,帮助你快速掌握Linux编程中的make的构建!适用人群: 零基础、新手、想快速学习Linux下C、C++编程的童鞋!

23,118

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧