C语言make和Makefile介绍及使用
什么是make
make是一种自动化编译工具,可以根据源代码和规则文件(Makefile),自动化地编译出可执行文件。make的主要优点是能够自动化编译过程,只需要更新发生改变的文件,就可以快速地编译出目标文件或可执行文件。这对于大型项目和复杂项目来说,非常有用。
Makefile介绍
在使用make时,需要编写一个规则文件,也就是Makefile。Makefile主要包括一些规则和动作,用来指示make如何生成目标文件或可执行文件。
Makefile基本格式如下:
target: dependencies
command
target
:target是要生成的目标文件的名称,可以是可执行文件,也可以是中间过程文件。dependencies
:dependencies是生成目标文件所需的依赖文件,也就是目标文件的源文件,或其生成过程的其他中间过程文件。command
:command是生成目标文件的具体命令。
Makefile还包括变量、条件分支、循环等语句,用来更加灵活地处理编译过程中的特殊情况。具体语法和应用请参考相关资料。
Makefile示例
以下是一个简单的Makefile示例:
CC = gcc
CFLAGS = -g -Wall
target: main.c foo.c
$(CC) $(CFLAGS) main.c foo.c -o target
这里定义了两个变量CC
和CFLAGS
,分别表示编译器和编译选项。接下来定义了一个目标文件target
,它依赖于两个源文件main.c
和foo.c
。command
中,使用$(CC)
和$(CFLAGS)
代表编译器和编译选项变量,再将两个源文件编译后链接成可执行文件。
以下是一个更复杂的Makefile示例:
CC = gcc
CFLAGS = -g -Wall
SRC_DIR = src
OBJ_DIR = obj
BIN_DIR = bin
TARGET = $(BIN_DIR)/app
SRCS = $(wildcard $(SRC_DIR)/*.c)
OBJS = $(patsubst $(SRC_DIR)/%.c, $(OBJ_DIR)/%.o, $(SRCS))
$(TARGET): $(OBJS)
$(CC) $(CFLAGS) $^ -o $@
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
$(CC) $(CFLAGS) -c $< -o $@
.PHONY: clean
clean:
rm -rf $(OBJS) $(TARGET)
这个Makefile用到了变量、条件分支、循环等语句,同时也规定了源代码、目标文件和可执行文件的存放路径。$(wildcard)
函数可以用来获取某个目录下所有的以.c
为后缀的文件名,$(patsubst)
函数可以将每个.c
源文件对应成一个.o
目标文件的路径。在.PHONY
声明下,我们定义了clean
规则,用于清除生成的目标文件和可执行文件。
make命令示例
以下是使用make命令编译上述示例的过程:
$ cd project
$ make
执行make
命令后,make会根据Makefile中定义的规则来编译源代码,并生成可执行文件。如果想要重新编译,则可以用make clean
命令清除目标文件和可执行文件,再次执行make
命令。
参考资料
- GNU Make Manual: https://www.gnu.org/software/make/manual/
- Makefile教程: https://www.ruanyifeng.com/blog/2015/02/make.html
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言make和Makefile介绍及使用 - Python技术站