makefile模版

# funmain:hello.cpp mymath.h mymath.cpp main.cpp
# 	g++ -o funmain hello.cpp mymath.cpp main.cpp


# Makefile for a simple C++ project

# 编译器
CC = g++

# C++ 标准(可根据需要更改)
# CFLAGS = -std=c++11
`CFLAGS 是为 C 编译器设置的标志。如果你使用的是 gcc 或类似的 C 编译器,那么 CFLAGS 将会被用来设置编译 C 语言源代码时的编译选项。`
CXXFLAGS 则是为 C++ 编译器设置的标志。当你使用 g++ 或其他支持 C++ 的编译器时,CXXFLAGS 将被用来设置编译 C++ 语言源代码时的编译选项。
CFLAGS = -c -Wall
> -c:生成.o文件,而不是进行链接生成可执行文件(只编译不连接)
> Wall 这个选项表示启用“所有警告”(All Warnings)
#-c
# 链接器标志(如果有库依赖,可以在这里添加)wwwwwwwwwwwww
LDFLAGS =

# 可执行文件名
TARGET = funmain

# 依赖的源文件
# SOURCES = main.cpp func1.cpp func2.cpp
SOURCES=$(wildcard *.cpp)


# 从源文件生成目标文件
# OBJECTS = $(SOURCES:.cpp=.o)
OBJECTS=$(patsubst %.cpp, %.o, $(SOURCES))

# 默认目标是构建可执行文件
all: $(TARGET)

#
# 规则:从源文件生成可执行文件ssss
$(TARGET): $(OBJECTS)
	$(CC) $(LDFLAGS) -o $@ $^ $(LDFLAGS)

# 为每个源文件创建目标文件
.cpp.o:
	$(CC) $(CFLAGS) -c $< -o $@

# 清除目标文件和可执行文件
.PHONY:clean
防止项目文件中有clean文件
clean:
	rm -f $(OBJECTS) $(TARGET)

# 彻底清理,包括依赖文件
mrproper: clean
	rm -f *.d

# 重新构建所有内容
rebuild: clean all

# 显示帮助信息dddddddddddddddddd
help:
	@echo "可用的目标:"
	@echo "   all    - 构建程序 (默认)"
	@echo "   clean  - 清除目标文件和可执行文件"
	@echo "   mrproper - 彻底清除,包括自动依赖文件"
	@echo "   rebuild - 重新构建所有内容"

假设你有一个 Makefile,其中需要编译 C 和 C++ 的混合源代码,你可以像下面这样设置 CFLAGS 和 CXXFLAGS:

CC = gcc # C 编译器
CXX = g++ # C++ 编译器
CFLAGS = -Wall -O2 # C 的编译选项
CXXFLAGS = -Wall -O2 -std=c++11 # C++ 的编译选项

# 规则:从 .c 文件生成 .o 文件
%.o: %.c
	$(CC) $(CFLAGS) -c $< -o $@

# 规则:从 .cpp 文件生成 .o 文件
%.o: %.cpp
	$(CXX) $(CXXFLAGS) -c $< -o $@

all: prog

prog: main.o util.o cppfunc.o
	$(CXX) $^ -o $@

clean:
	rm -f *.o prog

修改后的makefile

# funmain:hello.cpp mymath.h mymath.cpp main.cpp
# 	g++ -o funmain hello.cpp mymath.cpp main.cpp


# Makefile for a simple C++ project

# 编译器
CXX = g++

# C++ 标准(可根据需要更改)
# CFLAGS = -std=c++11

CXXFLAGS = -c -Wall -std=c++11
#-c
# 链接器标志(如果有库依赖,可以在这里添加)wwwwwwwwwwwww
LDFLAGS =

# 可执行文件名
TARGET = funmain

# 依赖的源文件
# SOURCES = main.cpp func1.cpp func2.cpp
SOURCES=$(wildcard *.cpp)


# 从源文件生成目标文件
# OBJECTS = $(SOURCES:.cpp=.o)
OBJECTS=$(patsubst %.cpp, %.o, $(SOURCES))

# 默认目标是构建可执行文件
all: $(TARGET)

#
# 规则:从源文件生成可执行文件ssss
$(TARGET): $(OBJECTS)
	$(CXX) $(LDFLAGS) -o $@ $^ $(LDFLAGS)

# 为每个源文件创建目标文件
.cpp.o:
	$(CXX) $(CFLAGS) -c $< -o $@

# 清除目标文件和可执行文件
.PHONY:clean
clean:
	rm -f $(OBJECTS) $(TARGET)

# 彻底清理,包括依赖文件
mrproper: clean
	rm -f *.d

# 重新构建所有内容
rebuild: clean all

# 显示帮助信息dddddddddddddddddd
help:
	@echo "可用的目标:"
	@echo "   all    - 构建程序 (默认)"
	@echo "   clean  - 清除目标文件和可执行文件"
	@echo "   mrproper - 彻底清除,包括自动依赖文件"
	@echo "   rebuild - 重新构建所有内容"

使用makefile的好处:
对每个文件单独编译,节约编译时间
如果对某个文件进行修改,只需要单独编译修改的文件,然后生成

posted on   不败剑坤  阅读(40)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· .NET Core 中如何实现缓存的预热?
· 三行代码完成国际化适配,妙~啊~
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?

导航

< 2025年3月 >
23 24 25 26 27 28 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 1 2 3 4 5
点击右上角即可分享
微信分享提示