我使用以下makefile来构建我的项目:
CC = /usr/bin/g++
CFLAGS = -Wall -pedantic -std=c++0x
LDFLAGS =
OBJ = main.o pnmhandler.o pixmap.o color.o
pnm: $(OBJ)
$(CC) $(CFLAGS) -o pnm $(OBJ) $(LDFLAGS)
%.o: %.c
$(CC) $(CFLAGS) -c $<在运行make时,会得到以下错误:
/usr/include/c++/4.9.1/bits/c++0x_warning.h:32:2:错误:这个文件需要编译器和库对C++ 2011标准的支持。这种支持目前是实验性的,必须使用-std=c++11或-std=gnu++11编译器选项来启用。
正如我可以从下面的一行中看到的,CFLAGS没有被正确地包括在内,但是我不知道我做错了什么:
g++ -c -o main.o main.cpp
也尝试了-std=c++11和-std=gnu++11,没有任何结果。有什么想法吗?
如果我运行make -Bn,我会得到:
g++ -c -o main.o main.cpp
g++ -c -o pnmhandler.o pnmhandler.cpp
g++ -c -o pixmap.o pixmap.cpp
g++ -c -o color.o color.cpp
/usr/bin/g++ -Wall -pedantic -std=c++0x -o pnm main.o pnmhandler.o pixmap.o color.o 编辑:将规则%.o: %.c替换为%.o: %.cpp解决了我的问题。
发布于 2017-07-17 16:21:45
你看到的原因
g++ -c -o main.o main.cppMake正在调用其标准规则来创建对象文件:
%.o: %.cpp
# recipe to execute (built-in):
$(COMPILE.cpp) $(OUTPUT_OPTION) $<命令展开为
$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c -o $@ $<与其在makefile中设置CC和CFLAGS,不如设置CXX和CXXFLAGS,这是为C++而不是C设置的,这允许上面的内置规则为您工作,然后您只需要确保正确的链接器被使用,例如
pnm: LINK.o=$(LINK.cc)
pnm: $(OBJ)您也不需要%.o: %.c规则,因为您没有C源。
完整Makefile:
CXX = /usr/bin/g++
CXXFLAGS = -Wall -pedantic -std=c++0x
OBJ = main.o pnmhandler.o pixmap.o color.o
pnm: LINK.o=$(LINK.cc)
pnm: $(OBJ)
clean::
$(RM) pnm
.PHONY: cleanhttps://stackoverflow.com/questions/26679441
复制相似问题