变量名 = 值
的语法定义变量,然后通过$(变量名)
来引用变量。例如:CC = gcc
CFLAGS = -Wall
target: dependency
$(CC) $(CFLAGS) -o target source.c
target: dependency
command
其中,target
是构建的目标文件,dependency
是目标文件的依赖项,command
是构建的实际命令。target: dependency1 dependency2
command
make
命令的递归调用功能,例如:all:
$(MAKE) -C subdir
在Makefile中,all
是一个常见的目标名称,它通常被用作默认目标。当你在命令行中运行make
而没有指定具体的目标时,Make工具会尝试构建默认目标,而通常这个默认目标就是all
。
例如,一个简单的Makefile可能包含如下内容:
all: target1 target2
target1:
command1
target2:
command2
在这个例子中,all
是默认目标,它依赖于target1
和target2
。当你在命令行中运行make
时,它将尝试构建all
,然后按照规则依次构建target1
和target2
。这样,通过将常用的目标放在all
中,可以方便地一次性构建整个项目或执行一系列任务。
你可以在Makefile中自定义all
目标,根据项目的需要添加相关的依赖项和命令。
wildcard
、foreach
等。例如:sources = $(wildcard *.c)
objs = $(patsubst %.c, %.o, $(sources))
Makefile中有一些常见的函数,它们提供了在Makefile中进行文本处理和操作的能力。以下是一些常见的Makefile函数:
sources = $(wildcard *.c)
objs = $(patsubst %.c, %.o, $(sources))
files = file1.c file2.c file3.c
targets = $(foreach file, $(files), $(basename $(file)).o)
debug = 1
ifdef debug
CFLAGS += -g
endif
date = $(shell date)
sources = file1.c file2.c file3.c
objs = $(addprefix obj_, $(sources))
message = Hello, World!
result = $(subst World, Universe, $(message))
spaces = one two three
stripped = $(strip $(spaces))
make
命令包括make
、make clean
等。选项包括-C
用于指定工作目录,-f
用于指定Makefile文件等。make
命令:make
:all
)进行构建。make target
:make clean
用于清理生成的文件。make -f Makefile
:Makefile
的文件进行构建,而不使用默认的Makefile
文件。make -n
或make --just-print
:make -B
或make --always-make
:make clean
:make
选项:-C directory
:make
在执行之前进入directory
目录。-j N
:make -j4
表示同时执行4个任务。-k
或--keep-going
:-s
或--silent
:make
运行在安静模式,减少输出信息。-r
或--no-builtin-rules
:-d
或--debug
:-w
或--print-directory
:--version
:make
的版本信息。这只是一些常见的make
命令和选项,实际上还有更多的选项可以根据具体的需求使用。你可以通过运行man make
或查阅相关文档来获取更详细的信息。