我将我的Makefile更改为C ++ 11版本,但仍收到列表初始化错误

问题描述 投票:0回答:1

我制作了一个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。

我想念什么?

c++ makefile
1个回答
1
投票

您的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,在那里您可以更高级别地定义源,目标和编译选项。

© www.soinside.com 2019 - 2024. All rights reserved.