如何在Makefile中配置CXXFLAGS以启用C++11编译支持?
在Makefile中启用C++11编译标准
很简单,咱们可以通过设置Make的编译变量来统一添加C++11选项,这样不用逐个修改每个编译规则,既高效又好维护。
方法说明
Make有默认的C++相关变量:
CXX:指定C编译器(默认就是g,所以不用改)CXXFLAGS:编译选项,我们把-std=c++11加到这里,所有编译步骤都会自动继承这个选项
修改后的完整Makefile
# 定义编译选项,启用C++11,可额外添加警告选项增强代码检查 CXXFLAGS = -std=c++11 -Wall all: Project4 Project4: Character.o Barbarian.o BlueMen.o Vampire.o Medusa.o HarryPotter.o LinkedList.o Queue.o Stack.o main.o $(CXX) $(CXXFLAGS) $^ -o $@ Character.o: Character.cpp Character.h $(CXX) $(CXXFLAGS) -c $< Barbarian.o: Barbarian.cpp Barbarian.h $(CXX) $(CXXFLAGS) -c $< BlueMen.o: BlueMen.cpp BlueMen.h $(CXX) $(CXXFLAGS) -c $< Vampire.o: Vampire.cpp Vampire.h $(CXX) $(CXXFLAGS) -c $< Medusa.o: Medusa.cpp Medusa.h $(CXX) $(CXXFLAGS) -c $< HarryPotter.o: HarryPotter.cpp HarryPotter.h $(CXX) $(CXXFLAGS) -c $< LinkedList.o: LinkedList.cpp LinkedList.h $(CXX) $(CXXFLAGS) -c $< Queue.o: Queue.cpp Queue.h $(CXX) $(CXXFLAGS) -c $< Stack.o: Stack.cpp Stack.h $(CXX) $(CXXFLAGS) -c $< main.o: main.cpp Character.h Barbarian.h BlueMen.h Vampire.h Medusa.h HarryPotter.h LinkedList.h Queue.h Stack.h $(CXX) $(CXXFLAGS) -c $< clean: -rm *.o Project4
关键改动点
- 添加
CXXFLAGS变量:把-std=c++11加入全局编译选项,同时加了-Wall开启基础警告(可选,能帮你发现潜在代码问题) - 替换编译命令:用
$(CXX)代替硬编码的g++,用$(CXXFLAGS)引入全局选项,这样规则更通用 - 自动变量简化:用
$<表示当前规则的第一个依赖文件(比如对应的.cpp),$^表示所有依赖文件,$@表示目标文件,让Makefile更简洁 - 修正文件名拼写:你原来的链接命令里把
Project4写成了Projec4,已经帮你修正,避免编译生成错误的文件名 - clean目标更新:加上了删除最终可执行文件
Project4的操作,清理更彻底
如果你不想用变量(不推荐,维护麻烦)
也可以直接在每个g++命令后加-std=c++11,比如:
g++ -std=c++11 -c Character.cpp
但这种方式需要修改所有编译规则,以后换标准(比如C14/C17)要改很多地方,所以还是推荐用变量的方式。
现在你直接用这个修改后的Makefile,执行make就能自动以C++11标准编译所有文件啦~
内容的提问来源于stack exchange,提问作者Arjun Kahlon
相关产品推荐
相关产品推荐

