[c/cpp] make学习——特殊变量(自动变量:$@等)
一、环境
[wit@ubuntu:make]$
[wit@ubuntu:make]$
[wit@ubuntu:make]$ uname -snr
Linux ubuntu 6.14.0-22-generic
[wit@ubuntu:make]$
[wit@ubuntu:make]$
[wit@ubuntu:make]$ make -v
GNU Make 4.4.1
Built for x86_64-pc-linux-gnu
Copyright (C) 1988-2023 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
[wit@ubuntu:make]$
[wit@ubuntu:make]$
二、脚本
[wit@ubuntu:make]$ cat makefile
# makefile to use:
# 1. make create
# create file: da.x db.x dc.x dd.x path1
# 2. make clean
# clean file: rm -rf t1.o ./path1/t2.o
# 3. make remove
# delete file: rm -rf da.x db.x dc.x dd.x path1/t2.o
#
# name:
# t* = target file(t1.o/t2.o)
# d* = dependent file(da.x/db.x/dc.x)
t1.o: da.x db.x dc.x dd.x ./path1/t2.o
@echo
@echo
@echo "\t[\$$%]:=" $%
@echo "\t[\$$*]:=" $*
@echo "\t[\$$@]:=" $@
@echo "\t[\$$+]:=" $+
@echo "\t[\$$<]:=" $<
@echo "\t[\$$?]:=" $?
@echo "\t[\$$|]:=" $|
@echo "\t[\$$^]:=" $^
touch t1.o
@echo
@echo
./path1/t2.o: da.x
@echo
@echo "\t[\$$(@D)]:=" $(@D)
touch ./path1/t2.o
@echo
.PHONY: clean create remove help
clean:
rm -rf t1.o ./path1/t2.o
create:
mkdir path1
touch da.x db.x dc.x dd.x
remove:
rm -rf path1
rm -rf da.x db.x dc.x dd.x t1.o
help:
@echo " makefile to use: "
@echo " 1. make create "
@echo " create file: da.x db.x dc.x dd.x path1 "
@echo " 2. make clean "
@echo " clean file: rm -rf t1.o ./path1/t2.o "
@echo " 3. make remove "
@echo " delete file: rm -rf da.x db.x dc.x dd.x path1/t2.o"
[wit@ubuntu:make]$
三、实例
[wit@ubuntu:make]$ ls
makefile
[wit@ubuntu:make]$
[wit@ubuntu:make]$
[wit@ubuntu:make]$ make help
makefile to use:
1. make create
create file: da.x db.x dc.x dd.x path1
2. make clean
clean file: rm -rf t1.o ./path1/t2.o
3. make remove
delete file: rm -rf da.x db.x dc.x dd.x path1/t2.o
[wit@ubuntu:make]$
[wit@ubuntu:make]$
[wit@ubuntu:make]$ make create && make
mkdir path1
touch da.x db.x dc.x dd.x
[$(@D)]:= path1
touch ./path1/t2.o
[$%]:=
[$*]:= t1
[$@]:= t1.o
[$+]:= da.x db.x dc.x dd.x path1/t2.o
[$<]:= da.x
[$?]:= da.x db.x dc.x dd.x path1/t2.o
[$|]:=
[$^]:= da.x db.x dc.x dd.x path1/t2.o
touch t1.o
[wit@ubuntu:make]$
[wit@ubuntu:make]$
[wit@ubuntu:make]$ ls
da.x db.x dc.x dd.x makefile path1 t1.o
[wit@ubuntu:make]$
[wit@ubuntu:make]$
[wit@ubuntu:make]$ make clean && make
rm -rf t1.o ./path1/t2.o
[$(@D)]:= path1
touch ./path1/t2.o
[$%]:=
[$*]:= t1
[$@]:= t1.o
[$+]:= da.x db.x dc.x dd.x path1/t2.o
[$<]:= da.x
[$?]:= da.x db.x dc.x dd.x path1/t2.o
[$|]:=
[$^]:= da.x db.x dc.x dd.x path1/t2.o
touch t1.o
[wit@ubuntu:make]$
[wit@ubuntu:make]$
[wit@ubuntu:make]$ ls
da.x db.x dc.x dd.x makefile path1 t1.o
[wit@ubuntu:make]$
[wit@ubuntu:make]$
[wit@ubuntu:make]$ make remove
rm -rf path1
rm -rf da.x db.x dc.x dd.x t1.o
[wit@ubuntu:make]$
[wit@ubuntu:make]$
[wit@ubuntu:make]$ ls
makefile
[wit@ubuntu:make]$
[wit@ubuntu:make]$
[wit@ubuntu:make]$ cat makefile
# makefile to use:
# 1. make create
# create file: da.x db.x dc.x dd.x path1
# 2. make clean
# clean file: rm -rf t1.o ./path1/t2.o
# 3. make remove
# delete file: rm -rf da.x db.x dc.x dd.x path1/t2.o
#
# name:
# t* = target file(t1.o/t2.o)
# d* = dependent file(da.x/db.x/dc.x)
t1.o: da.x db.x dc.x dd.x ./path1/t2.o
@echo
@echo
@echo "\t[\$$%]:=" $%
@echo "\t[\$$*]:=" $*
@echo "\t[\$$@]:=" $@
@echo "\t[\$$+]:=" $+
@echo "\t[\$$<]:=" $<
@echo "\t[\$$?]:=" $?
@echo "\t[\$$|]:=" $|
@echo "\t[\$$^]:=" $^
touch t1.o
@echo
@echo
./path1/t2.o: da.x
@echo
@echo "\t[\$$(@D)]:=" $(@D)
touch ./path1/t2.o
@echo
.PHONY: clean create remove help
clean:
rm -rf t1.o ./path1/t2.o
create:
mkdir path1
touch da.x db.x dc.x dd.x
remove:
rm -rf path1
rm -rf da.x db.x dc.x dd.x t1.o
help:
@echo " makefile to use: "
@echo " 1. make create "
@echo " create file: da.x db.x dc.x dd.x path1 "
@echo " 2. make clean "
@echo " clean file: rm -rf t1.o ./path1/t2.o "
@echo " 3. make remove "
@echo " delete file: rm -rf da.x db.x dc.x dd.x path1/t2.o"
[wit@ubuntu:make]$
[wit@ubuntu:make]$
四、参考
1. make.pdf(10.5.3: Automatic Variables) -- https://www.gnu.org/software/make/manual/make.pdf
.
本文由 lnlidawei 原创、整理、转载,本文来自于【博客园】; 整理和转载的文章版权归属【原创作者】; 转载或引用时【请保留文章的来源信息】:https://www.cnblogs.com/lnlidawei/p/19055804

浙公网安备 33010602011771号