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的好处:
对每个文件单独编译,节约编译时间
如果对某个文件进行修改,只需要单独编译修改的文件,然后生成
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· .NET Core 中如何实现缓存的预热?
· 三行代码完成国际化适配,妙~啊~
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?