我制作了一个Makefile:
output: main.o ./source/BlackJack.o ./source/Card.o ./source/Game.o ./source/Image.o
g++ -std=c++11 main.o ./source/BlackJack.o ./source/Card.o ./source/Game.o ./source/Image.o -o BlackJack
main.o: main.cpp
g++ -std=c++11 -c main.cpp
BlackJack.o: ./source/BlackJack.cpp ./source/BlackJack.hpp
g++ -std=c++11 -c ./source/BlackJack.cpp
Card.o: ./source/Card.cpp ./source/Card.hpp
g++ -std=c++11 -c ./source/Card.cpp
Image.o: ./source/Image.cpp ./source/Image.hpp
g++ -std=c++11 -c ./source/Image.cpp
但是我仍然收到错误消息
source/Game.cpp:80:20: error: non-aggregate type 'vector<Casino>' cannot be
initialized with an initializer list
vector<Casino> casVec = {flamingo, mirage, bellagio};
我想我将编译器的版本更改为c ++ 11。
我想念什么?
您的Makefile没有source/Game.o: source/Game.cpp
的条目,因此它会回到内置规则:
.cpp.o:
$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c $(OUTPUT_OPTION) $<
...不会自动编译为C ++ 11。
因此,您可以通过这样做大大简化Makefile的工作
CXXFLAGS += -std=c++11
并删除所有用于编译cpp文件的自定义规则。
您可能还想花一些时间来学习CMake,在那里您可以更高级别地定义源,目标和编译选项。