概述
akefile
=和:=
x := foo
y := $(x) bar
x := later
其等价于:
y := foo bar
x := later
目标:$@ 表示规则中的目标文件集。如果有多个目标,那么,"$@"就是匹配于目标中模式定义的集合。
依赖:$^ 所有的依赖集合。以空格分隔。如果在依赖目标中有多个重复的,那个这个变量会去除重复的依赖目标,只保留一份。
依赖:$< 依赖第一个名字。如果依赖目标是以模式(即"%")定义的,那么"$<"将是符合模式的一系列的文件集。注意,其是一个一个取出来的。
变量:在Makefile中的定义的变量,就像是C/C++语言中的宏一样
objects = program.o foo.o utils.o
program : $(objects)
cc -o program $(objects)
Makefile shell注意点
http://www.blogjava.net/jasmine214--love/archive/2012/01/10/368191.html
1:尽在Makefile文件的目标项冒号后的另起一行的代码才是shell代码。
2:Makefile中的shell,每一行是一个进程,不同行之间变量值不能传递。所以,Makefile中的shell不管多长也要写在一行。
3:Makefile中的变量以$开头, 所以,为了避免和shell的变量冲突,shell的变量以$$开头
SOURCES = $(foreach d,$(SRCDIRS),$(wildcard $(addprefix $(d)/*,$(SRCEXTS))))
OBJS= $(patsubst %.cpp,./obj/%.o,$(notdir $(SOURCES)))
GCNOS= $(patsubst %.cpp,./obj/%.gcno,$(notdir $(SOURCES)))
Makefile文件范例
注意使用tab键作为命令的开始,行尾不需要空格,尤其是wins->linux会出现问题
#BASE_DIR :=$(shell pwd)
SUBDIRS= fnd_system fnd_pzasset
#@取消命令本身的输出
#$1 shell第一个参数
define make_subdir
@for subdir in $(SUBDIRS); do
pwd && echo $$subdir && echo $1 && echo $@ || exit $$?;
done;
endef
#.PHONY 说明 all等等为伪命令
.PHONY : all install clean
all :
@echo $(BASE_DIR)
$(call make_subdir, all)
install :
$(call make_subdir, install)
debug :
$(call make_subdir, debug)
clean :
$(call make_subdir, clean)
最后
以上就是激昂小懒猪为你收集整理的Makefile递归编译的全部内容,希望文章能够帮你解决Makefile递归编译所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复