SOURCES = $(wildcard *.c)
SOURCES =所有.c的文件。因为不能写成SOURCES =*.c,SOURCES =*.c表示SOURCES = ”*.c"这个值。
RELOBJFILES = $(SOURCES:%.c=release/%.o)
$(SOURCES:%.c=release/%.o)”表示SOURCES中的.c替换成.o并指到release文件夹中。
“-p”
“--print-data-base”
输出makefile中的所有数据,包括所有的规则和变量。这个参数会让一个简单的makefile都会输出一堆信息。
install: releasemkdir -p $(EXEC_DIR)
install $(RELTARGET) $(EXEC_DIR)
运行make install后
mkdir -p /home/wuminsong/Desktop/zynq/lab/makefile/target
install release/lcd_key /home/wuminsong/Desktop/zynq/lab/makefile/target
mkdir 命令用来创建指定的名称的目录,要求创建目录的用户在当前目录中具有写权限,并且指定的目录名不能是当前目录中已有的目录。
“install”
这个伪目标功能是安装已编译好的程序, 其实就是把目标执行文件拷贝到指定的
目标中去。
install $(RELTARGET) $(EXEC_DIR) 表示将 $(RELTARGET)复制到$(EXEC_DIR)
测试
all: release
app:
./upgrade_client 192.168.20.254 $(RELTARGET)
install: release
@mkdir -p $(EXEC_DIR)
install $(RELTARGET) $(EXEC_DIR)
release: $(RELTARGET)
$(RELTARGET): $(RELOBJFILES)
$(LINK.c) -o $@ $^ $(RELLDFLAGS)
$(RELOBJFILES): release/%.o: %.c $(HEADERS)
@mkdir -p release
$(COMPILE.c) $(RELCFLAGS) -o $@ $<
如果只删除release/lcd_key 不执行$(RELOBJFILES): release/%.o: %.c $(HEADERS)
如果注释all: release
make后打印
./upgrade_client 192.168.20.254 release/lcd_key
Open file failed
: No such file or directory
将app:
./upgrade_client 192.168.20.254 $(RELTARGET)移到后面去
release: $(RELTARGET)
$(RELTARGET): $(RELOBJFILES)
$(LINK.c) -o $@ $^ $(RELLDFLAGS)
$(RELOBJFILES): release/%.o: %.c $(HEADERS)
mkdir -p release
$(COMPILE.c) $(RELCFLAGS) -o $@ $<
app:
./upgrade_client 192.168.20.254 $(RELTARGET)
打印信息来看没有执行app
将all:release放在后面
app:
./upgrade_client 192.168.20.254 $(RELTARGET)
install: release
@mkdir -p $(EXEC_DIR)
install $(RELTARGET) $(EXEC_DIR)
all: release
release: $(RELTARGET)
$(RELTARGET): $(RELOBJFILES)
$(LINK.c) -o $@ $^ $(RELLDFLAGS)
$(RELOBJFILES): release/%.o: %.c $(HEADERS)
@mkdir -p release
$(COMPILE.c) $(RELCFLAGS) -o $@ $<
打印信息只执行了app