makefile显示命令
原创
©著作权归作者所有:来自51CTO博客作者WongKyunban的原创作品,请联系作者获取转载授权,否则将追究法律责任
每条命令的开头必须以 Tab 键开头,除非命令是跟在依赖规则后的分号后面。在命令行之间中的空格或者空行会被忽略,但是如果该空格或空行是以 Tab 键开头的,那么 make 会认为其是一个空命令。
如果我们在编译过程中,可以显示正在编译哪一步,就会很方便我们对程序编译的监控。我们可以使用makefile的一些显示命令,添加上一些类似注释的信息,伴随编译的过程打印到控制台上。
在makefile中,当我们在命令行前加上@ ,那么这个命令将不会被 make 显示出来。我们常用@echo命令显示一些有用的信息,如我们以下这个makefile文件:
all:main1 main2
.PHONY : all
MAIN_1_OBJ = main.o hello.o car.o
main1: $(MAIN_1_OBJ)
@echo 正在创建程序main1...
gcc -o main1 $(MAIN_1_OBJ)
main.o hello.o:hello.h
main.o car.o:car.h
main2:main2.o
@echo 正在创建程序main2...
@gcc -o main2 main2.o
.PHONY:cleanall cleanobj cleanapp
cleanall:cleanobj cleanapp
cleanobj:
@echo 正在删除目标文件...
-rm *.o
cleanapp:
@echo 正在删除可执行文件main1 main2
-rm
在命令行前加上@ ,那么这个命令将不会被 make 显示出来:
~/Desktop/mydir$ make
cc -c -o main.o main.c
cc -c -o hello.o hello.c
cc -c -o car.o car.c
正在创建程序main1...
gcc -o main1 main.o hello.o car.o
cc -c -o main2.o main2.c
正在创建程序main2...
可以看到echo命令没有被显示出来,gcc -o main2 main2.o这行命令前,因为有@,所以在make时,也没有被显示出来,但是他们都被执行了。
如果执行make命令时,带上参数 -n 或 --just-print,那么其只是显示命令,但不会执行命令:
~/Desktop/mydir$ make -n
cc -c -o main.o main.c
cc -c -o hello.o hello.c
cc -c -o car.o car.c
echo 正在创建程序main1...
gcc -o main1 main.o hello.o car.o
cc -c -o main2.o main2.c
echo 正在创建程序main2...
gcc -o main2 main2.o
这个功能很方便我们调试Makefile,可以查看书写的makefile命令最后要执行的内容和执行的顺序。
如果执行make命令时,带上参数 -s 或 --silent 或 --quiet 则会禁止命令在控制台的打印,但命令会被执行:
~/Desktop/mydir$ make -s
正在创建程序main1...
正在创建程序main2...
~/Desktop/mydir$ ls
car.c car.o hello.c hello.o main2 main2.o main.o module
car.h hello hello.h main1 main2.c main.c makefile
谢谢阅读