Makefile

简介: Makefile

Makefile

Makefile 是一种用于自动化构建程序的工具,通常与 C、C++ 等编程语言一起使用。它包含了一系列规则,用于描述如何从源文件生成目标文件,以及如何将目标文件链接成最终的可执行文件或库文件。下面让我举一些例子来介绍Makefile。

 1.目标 (Target):
在 Makefile 中,目标是指我们要生成的文件,可以是可执行文件、目标文件或库文件。
 2.依赖 (Dependencies):
每个目标可能依赖于其他文件,这些文件称为依赖。如果目标文件的某个依赖文件发生了变化,那么该目标需要重新构建。
 3.规则 (Rules):
Makefile 中的规则定义了如何生成目标文件。它包括目标、依赖和生成命令。
 4.变量 (Variables):
变量在 Makefile 中用于存储重复使用的值,比如编译器名称、编译选项等。
 5.注释 (Comments):
在 Makefile 中可以使用 # 符号来添加注释,用于提高代码的可读性。

示例代码:
 示例 1:简单的 C 程序
假设我们有一个简单的 C 程序,由 main.c 和 helper.c 组成,需要生成一个名为 my_program 的可执行文件。

CC = gcc
CFLAGS = -Wall -O2
SRC = main.c helper.c
OBJ = $(SRC:.c=.o)
TARGET = my_program
$(TARGET): $(OBJ)
    $(CC) $(CFLAGS) $^ -o $@
%.o: %.c
    $(CC) $(CFLAGS) -c $< -o $@
clean:
    rm -f $(OBJ) $(TARGET)



在这个示例中:
CC 定义了编译器。
CFLAGS 定义了编译选项。
SRC 包含了所有的源文件。
OBJ 是由源文件生成的目标文件。
$(TARGET) 是生成的可执行文件。
规则定义了如何生成目标文件和最终的可执行文件。
clean 目标用于清理生成的目标文件和可执行文件。

 示例 2:使用变量和函数

CC = gcc
CFLAGS = -Wall -O2
SRC_DIR = src
BUILD_DIR = build
TARGET = my_program
SRCS = $(wildcard $(SRC_DIR)/*.c)
OBJS = $(SRCS:$(SRC_DIR)/%.c=$(BUILD_DIR)/%.o)
$(BUILD_DIR)/$(TARGET): $(OBJS)
    $(CC) $(CFLAGS) $^ -o $@
$(BUILD_DIR)/%.o: $(SRC_DIR)/%.c
    $(CC) $(CFLAGS) -c $< -o $@
.PHONY: clean
clean:
    rm -rf $(BUILD_DIR)/*.o $(BUILD_DIR)/$(TARGET)



 这个示例中,我们使用了 wildcard 函数来获取源文件列表,并使用变量和函数来简化 Makefile 的编写。
 示例 3:多目标和伪目标

all: program1 program2
program1: program1.o
    $(CC) $(CFLAGS) $^ -o $@
program2: program2.o
    $(CC) $(CFLAGS) $^ -o $@
%.o: %.c
    $(CC) $(CFLAGS) -c $< -o $@
.PHONY: clean
clean:
    rm -f *.o program1 program2


 这个示例中,我们定义了多个目标,以及一个伪目标 clean。当执行 make all 时,会生成 program1 和 program2。
 通过以上示例,你可以了解一些基础的关于Makefile的知识 ,并学会如何编写简单而强大的构建规则来管理你的项目。 Makefile 的强大之处在于它可以自动化编译和链接过程,使得项目的构建变得简单和可靠。

 

相关文章
|
6月前
|
IDE Shell Linux
013.Makefile
Makefiel 编写 我们之前其实已经写过一些makefile了,只是没有具体介绍,本篇博客就详细的介绍一下Makefile。
54 0
|
Shell Linux Go
一日一技:5分钟掌握 Makefile
一日一技:5分钟掌握 Makefile
162 0
|
IDE Unix 编译器
Makefile
Makefile
77 0
|
Linux C语言 编译器
makefile 中 $@ $^ % 2015-04-11 18:02:36
来自博客: http://blog.csdn.net/kesaihao862/article/details/7332528  这篇文章介绍在LINUX下进行C语言编程所需要的基础知识。
1305 0
|
C语言
makefile中伪目标的理解
1. 我们知道Makefile中的语法是这样: target ... : prerequisites ... command … …   2. 假如编译两个文件可以这么写: a.o:a.c  gcc -c a.c b.o:b.c  gcc -c b.c Test: a.o b.o   gcc -o Test a.o b.oclean:  rm *.o 我们可以单独这么运行:make a.o或者make b.o或者make clean注意上面三个的区别。
1219 0