Linux下常用makefile模板

1、什么是makefile?而makefile就是告诉make如何编译、链接程序的脚本文件。dependenciescommand其中target表示目标文件名(可执行文件)。

什么是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模板

在大型项目中,源代码可能会分布在不同的目录下。为了编译整个项目,我们需要使用递归模板。

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和编程的程序员撰写,希望能够为大家提供一些有用的信息和帮助。如果您对本文有任何疑问或建议,请在评论区留言,我会尽快回复。