Linux下常用makefile模板
1、什么是makefile?而makefile就是告诉make如何编译、链接程序的脚本文件。dependenciescommand其中target表示目标文件名(可执行文件)。
- 本文目录导读:
- 1、什么是makefile?
- 2、为什么要写makefile?
- 3、常用的几个makefile模板:
- 4、关于作者
什么是makefile?
在Linux环境下,为了编译和链接程序,我们需要使用一种叫做make的工具。而makefile就是告诉make如何编译、链接程序的脚本文件。
为什么要写makefile?
在开发大型项目时,有很多源文件需要编译并生成可执行文件。手动一个一个去编译非常麻烦且容易出错。而使用makefile可以自动化完成这个过程。
常用的几个makefile模板:
1. 最简单的模板
“`
target: dependencies
command
其中target表示目标文件名(可执行文件),dependencies表示依赖的源代码文件名和头文件名,command表示编译命令。
例如:
hello: hello.c
gcc -o hello hello.c
2. 通用模板
CC=gcc
CFLAGS=-Wall
LDFLAGS=
all: target
target: dependencies
$(CC) $(LDFLAGS) $^ -o $@
%.o:%.c
$(CC) $(CFLAGS) -c $< -o $@
clean:
rm *.o target
其中CC表示使用gcc进行编译,CFLAGS表示gcc参数选项(譬如-Wall),LDFLAGS为空。
all规则指定最终生成目标(可执行)程序。
%代表通配符,%.o表示所有的.o文件。$<表示依赖的第一个文件名,$^表示所有依赖文件名。
3. 递归模板
![Linux下常用makefile模板缩略图 Linux下常用makefile模板](https://www.72715.net/wp-content/uploads/2023/05/4437b584579e150fc3f0903d0e6e0caa.png)
在大型项目中,源代码可能会分布在不同的目录下。为了编译整个项目,我们需要使用递归模板。
TARGET = main
CC = gcc
CFLAGS = -Wall
SRCDIR := src
OBJDIR := obj
SRC := $(wildcard $(SRCDIR)/*.c)
OBJ := $(SRC:$(SRCDIR)/%.c=$(OBJDIR)/%.o)
all: dir $(TARGET)
$(TARGET): $(OBJ)
$(CC) $^ -o $@
$(OBJDIR)/%.o: $(SRCDIR)/%.c
@echo “Compiling $<..."
@$(CC) -c $(CFLAGS) -o $@ $<
dir:
mkdir -p obj
rm -rf obj/ *.out main
.PHONY: all clean dir
其中,我们将源代码存放在src目录下,将编译生成的目标文件存放在obj目录下。
wildcard指令可以获取指定路径下所有符合条件(譬如.c结尾)的文件名。
%代表通配符。这里指定了使用src和obj作为路径前缀。
.PHONY指令用于声明伪目标(譬如clean),以防止与同名文件冲突。
makefile是一种非常重要且实用的工具,在Linux开发中经常用到。通过上述几个模板,我们可以轻松地编写出高效而且可靠的makefile脚本,提高开发效率和质量。
关于作者
本文由一名热爱Linux和编程的程序员撰写,希望能够为大家提供一些有用的信息和帮助。如果您对本文有任何疑问或建议,请在评论区留言,我会尽快回复。