支持C++11的Makefile

3

我最近开始了一个C++小项目。我创建了一个简单的Makefile:

output: main.o google_api.o
    g++ main.o google_api.o -o output
    rm *.o
    clear
    ./output

main.o: main.cpp
    g++ -c main.cpp

test.o: google_api.cpp google_api.h
    g++ -c google_api.cpp

当我编译我的代码时,出现了以下错误 -
非聚合类型 'vector' 无法用初始化列表初始化
我检查了这个问题并发现需要在我的 makefile 中添加 -std=c++11 支持来解决这个问题。我将这个命令添加到代码中:
g++ -std=c++11 main.o google_api.o -o output
但是没有任何改变。如果有人能帮我解决这个问题,那就太好了。谢谢。

1
你更改的是链接的行,而不是编译的行。你需要在两个地方都添加标志。 - Some programmer dude
1
我还建议您学习更多关于 make 和 makefile 的内容。特别是关于变量的部分。 - Some programmer dude
1个回答

8

将此更改为:

main.o: main.cpp
    g++ -c main.cpp

to:

main.o: main.cpp
    g++ -std=c++11 -c main.cpp

您可以将以下内容作为您的Makefile基础:

你可能需要像这样使用它来处理Makefile

CXX=g++
CXXFLAGS=-g -Wall -MMD -std=c++11
LDLIBS=-lm # list libs here
output: main.o google_api.o
clean:
    $(RM) *.o *.d output
-include $(wildcard *.d)

在stackoverflow上也有类似的问题:Makefile c++11支持


1
应该使用CXX而不是CC吗? - ilent2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接