Makefile简易模板
Makefile 简易模板,可直接套用
hello.c:
#include <stdio.h>
#include "hello.h" // 包含自己的头文件是个好习惯
// 定义 hello 函数
int hello(char *str)
{
printf("hello_world!\n");
printf("ch = %s\n", str);
return 0;
}
hello.h:
#ifndef HELLO_H
#define HELLO_H
int hello(char *str);
#endif // HELLO_H
world.c:
#include <stdio.h>
char ch[] = "hello_world";
world.h:
#ifndef WORLD_H
#define WORLD_H
extern char ch[];
#endif // WORLD_H
main.c:
#include <stdio.h>
#include "hello.h"
#include "world.h"
int main()
{
printf("start...\n");
hello(ch);
printf("exit.\n");
return 0;
}
Makefile:
# $(wildcard *.c) 列出当前目录下的所有 .c 文件: hello.c main.c
# 用函数 patsubst 进行模式替换得到: hello.o main.o
OBJS = $(patsubst %.c,%.o,$(wildcard *.c))
TARGET = world.out
CC = gcc
$(TARGET): $(OBJS)
$(CC) -o $(TARGET) $(OBJS)
.PHONY: clean
clean:
rm -f *.o $(TARGET)
自动生成依赖
<project>
├── Makefile
├── build
└── src
├── hello.c
├── hello.h
├── world.c
├── world.h
└── main.c
SRC_DIR = ./src
BUILD_DIR = ./build
TARGET = $(BUILD_DIR)/world.out
CC = gcc
# 添加 -MMD -MP 标志来自动生成依赖文件
CFLAGS = -Wall -MMD -MP
# 查找所有源文件
SRCS = $(shell find $(SRC_DIR) -name '*.c')
# 将 .c 文件路径转换为 .o 文件路径
OBJS = $(patsubst $(SRC_DIR)/%.c, $(BUILD_DIR)/%.o, $(SRCS))
# 依赖文件列表,与 .o 文件一一对应
DEPS = $(OBJS:.o=.d)
# 默认目标
all: $(TARGET)
# 编译规则:从 .c 生成 .o,同时生成 .d
# -MMD -MP 标志会在这里生效
$(BUILD_DIR)/%.o: $(SRC_DIR)/%.c
@mkdir -p $(dir $@)
$(CC) $(CFLAGS) -c -o $@ $<
# 链接规则
$(TARGET): $(OBJS)
@echo "building $@..."
@mkdir -p $(dir $@)
$(CC) -o $(TARGET) $(OBJS)
# 清理规则
clean:
@echo "cleaning $(BUILD_DIR)..."
@rm -rf $(BUILD_DIR)
# 引入所有自动生成的 .d 文件
-include $(DEPS)
本文来自博客园,作者:奈何清风,转载请注明原文链接:https://www.cnblogs.com/Buling-/p/19442777
浙公网安备 33010602011771号