GNU make-Makefile文件简介

Makefile简介

Makefile是一种特殊格式的文件,被make工具使用来管理软件的构建过程。Makefile定义了一组规则和依赖关系,告诉make如何编译和链接程序。

Makefile语句

TARGET: PREREQUISTS
	COMMAND

Makefile的语句由上述三部分组成,例如target: hello prerequists: hello.c command: gcc hello.c -o hello

hello: hello.c
	gcc hello.c -o hello

Makefile引用

$@指代当前TARGET

Makefile变量

  • 递归展开方式变量

    这一类型的定义由=进行定义,此时是严格的文本替换。例如:

    xs = mh
    ns = $(xs)
    all:;
    	echo $(ns)
    

    在执行语句时,首先,echo $(ns)会替换为echo $(xs)然后才会替换成echo mh。这就是递归的进行替换。

  • 直接展开方式变量

    这一类型的定义由:=进行定义,在变量定义时就展开。

    ns := $(xs)
    xs = mh
    

    此时由于ns是直接展开的,如果xs定义在后面,此时ns会直接变为空,无法完成对xs变量的引用。

Makefile伪目标

伪目标使用.PHONY进行声明,其后的值如share,此语句表明share并不是真正的目标,只执行后续的命令,而不生成目标。

.PHONY: shared
shared: # 不生成shared目标文件
	ls

Makefile实例

CC = gcc
APP = webserver
SRCS-y := reactor.c webserver.c websocket.c
all: shared

.PHONY: shared build

shared: build/$(APP)-shared
	ln -sf $(APP)-shared build/$(APP)

build/$(APP)-shared: $(SRCS-y) | build
	$(CC) $(SRCS-y) -o $@

build:
	@mkdir -p $@ # @不打印命令

注意

  1. Makefilevscode中使用时可能会报错"make: *** No rule to make target '@mkdir', needed by 'build'. Stop."

    原因:vscode中的tab可能默认为四个空格

    解法:将tab修改为非四个空格

posted @ 2024-08-06 12:21  LemHou  阅读(46)  评论(0)    收藏  举报