宏定义的使用
Makefile
中宏定义的方法就是别名=要代替的内容
。要使用的时候则用$()
这样的形式。类似shell
中对变量的引用。
CC = gcc
INCLUDE = .
CFLAGS = -c
OFLAGS = -o
app:main.o a.o b.o
$(CC) $(OFLAGS) app main.o a.o b.o
main.o:main.c a.h b.h
$(CC) $(CFLAGS) main.c
a.o:a.c a.h
$(CC) -I$(INCLUDE) $(CFLAGS) a.c
b.o:b.c b.h
$(CC) -I$(INCLUDE) $(CFLAGS) b.c
依赖关系
make
命令处理Makefile
文件中定义的依赖关系,确定需要创建的文件以及创建顺序。
下面的Makefile
文件定义了多个目标,其中install
目标依赖于app
。在执行make install
命令的时候虽然创建app
的命令是写在前面的,但是make
命令能够自动判断出创建文件的正确顺序。
CC = gcc
INCLUDE = .
CFLAGS = -c
OFLAGS = -o
INSTDIR= /home/copyright/installdir
app:main.o a.o b.o
$(CC) $(OFLAGS) app main.o a.o b.o
main.o:main.c a.h b.h
$(CC) $(CFLAGS) main.c
a.o:a.c a.h
$(CC) -I$(INCLUDE) $(CFLAGS) a.c
b.o:b.c b.h
$(CC) -I$(INCLUDE) $(CFLAGS) b.c
clean:
-rm *.o app
install:app #目标install依赖于app,如果没有app,make则会先创建app
if [ -d $(INSTDIR) ]; \
then \
cp app $(INSTDIR);\
chmod a+x $(INSTDIR)/app;\
chmod og-w $(INSTDIR)/app;\
echo "Installed in $(INSTDIR)";\
else \
echo "Sorry, $(INSTDIR) does not exist";\
fi
在命令行敲入make install
命令,运行结果如下
目标install
实现将可执行文件app
安装到主目录下的一个文件夹,其中使用了shell
脚本命令。
如果不想在终端上看到中间的if那部分命令,可以在这一行 if [ -d $(INSTDIR) ]; \
开头添加@
符号,这样在执行shell
脚本命令的时候就不会在终端标准输出显示这些命令。(注意@
符号后要留一个空格)
install:app
@ if [ -d $(INSTDIR) ]; \
then \
cp app $(INSTDIR);\
chmod a+x $(INSTDIR)/app;\
chmod og-w $(INSTDIR)/app;\
echo "Installed in $(INSTDIR)";\
else \
echo "Sorry, $(INSTDIR) does not exist";\
fi
FEATURED TAGS
Ubuntu
markdown
stm32
OSDK
飞控
串口
Jscope
C
C++
bin
J-Flash
字符串
指针数组
malloc
vscode
svg
png
github
python
CMake
CMakeLists
Linux
拷贝构造函数
GIF
录屏
docker
操作系统
make
Makefile
文件操作
DSP
CCS
SQL
MySQL
shell
bochs
计算机网络
win10
SMTP
Socket
iOS
uxplay
投屏
证书错误
apt
nodesource
ELF
Typora
图床
fossil
sql
git
SecureCRT
windows
cygwin
blog
alsa
alsa-utils
alsa-lib
音频
USB
链接文件
内存
mmap
tcpdump
交叉编译
网络
防火墙
crontab
bond
Linux性能
udev
linux
pcie
wsl2
MMIO
wsl
qemu
raspi4
gdb
ssh
tun
tap
ifconfig
打印
gmac
phy
vim
组播
rock3a
win11
usb
sd
ubuntu
iptables
netfilter
wifi
veth
ipv6
wireshark
radvd
dhcpv6
dhcpv4
网络命名空间
br虚拟网卡
NDP
emmc
存储
raspi4b
baremental
jtag
buildroot
rootfs
ext4
调试
uboot
dropbear
raspi
ebpf
uart
baremetal
kernel
bringup
libbpf