Makefile

Makefile

Makefile 模版

Makefile的使用模板:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# Makefile for myproject

# compiler and linker
CC := gcc

# flags for compiler and linker
CFLAGS := -Wall -Wextra
LFLAGS :=

# target executable name
TARGET := myproject

# source files directory
SRC_DIR := src
# object files directory
OBJ_DIR := obj
# other files directory
OTHER_DIR := other

# extension of source files (C source files)
SRC_EXT := c
# extension of target files (object files)
TARGET_EXT := out

# source and target files (C source files)
SRCS := $(wildcard $(SRC_DIR)/*.($(SRC_EXT)))
TARGETS := $(patsubst $(SRC_DIR)/%,$(OBJ_DIR)/%.$(TARGET_EXT),$(basename $(SRCS)))

# default target
.PHONY: all
all: $(TARGETS)

# target for object files
$(OBJ_DIR)/%.$(TARGET_EXT): $(SRC_DIR)/%.c
mkdir -p $(dir $@)
$(CC) $(CFLAGS) -c $< -o $@

# target for removing generated files
.PHONY: clean
clean:
rm -rf $(OBJ_DIR) $(OTHER_DIR) $(TARGET)

# target for running the executable
.PHONY: run
run: $(TARGET)
./$(TARGET)

# target for checking memory leaks using valgrind
.PHONY: memcheck
memcheck: $(TARGET)
valgrind ./$(TARGET)

使用实例:

一个简单的 C 语言项目目录结构如下所示:

1
2
3
4
5
6
7
8
9
myproject/
├── Makefile
├── other
│ ├── config.ini
│ └── data.txt
└── src
├── main.c
├── myfunc.c
└── myfunc.h

这个项目的文件组织结构很简单,所有源代码文件都在 src/ ,里面,在 other/ 文件夹中放了一些其它需要的文件。现在使用我们上面介绍过的Makefile,只需在 myproject/ 目录下运行以下命令即可构建项目:

1
make

这会将 src/ 文件夹下的所有源文件编译为目标文件(obj/*.out) ,并将它们链接为可执行文件(myproject)。然后运行以下命令即可运行可执行文件:

1
make run

这将启动myproject可执行文件。此外,还有一些其他的Makefile目标可供选择,例如:

  • make clean :清除构建文件和运行文件。

  • make memcheck:使用valgrind检查内存泄漏、数组越界等问题。

  • make <target>:直接运行make <target>命令将对应的 target(如myproject)作为目标直接构建。

总之,Makefile的使用可以极大地提高项目管理和构建的效率。


Makefile
http://example.com/2023/06/01/Go入门到精通/Makefile/
作者
where
发布于
2023年6月1日
许可协议