Makefile用法记录
2019-01-24 本文已影响0人
Jason416
示例一
.s.o:
$(CC) $(CFLAGS) -o $@ -c $<
.c.o:
$(CC) $(CFLAGS) -o $@ -c $<
.PHONY:
clean
clean:
rm -rf *.o
- 这个规则表示所有的 .o文件都是依赖与相应的.c或.s文件;
- $(CC) - 表示引用变量的值
- $@ - 表示所有的目标
- $< - 表示引用第一个依赖
- $^ - 表示引用所有依赖
- .PHONY - 声明伪目标
示例二 - 内核模块编译
export ARCH=arm
ifeq ($(KERNELRELEASE),)
ifeq ($(ARCH),arm)
KERNEL_DIR ?= /home/topeet/itop4412_kernel_4_14_2_bsp/linux-4.14.2_iTop-4412_scp
ROOTFS ?= `pwd`
else
KERNEL_DIR ?= /lib/modules/$(shell uname -r)/build
endif
PWD := $(shell pwd)
modules:
$(MAKE) -C $(KERNEL_DIR) M=$(PWD) modules
module_install:
$(MAKE) -C $(KERNEL_DIR) M=$(PWD) INSTALL_MOD_PATH=$(ROOTFS) module_install
.PHONY:
clean
clean:
$(MAKE) -C $(KERNEL_DIR) M=$(PWD) clean
@#rm -rf *.o *.ko *.mod* modules.* Moduele.*
else
obj-m := hello.o
endif
-
= 是最基本的赋值,最后展开的时候才赋值
-
:= 是覆盖之前的值,与上面的=不同
-
?= 是如果没有被赋值过就赋予等号后面的值
-
+= 是添加等号后面的值
-
$(shell uname -r) 调用shell执行后面的命令(uname -r),作为变量的值