首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Makefile中忽略CFLAGS

在Makefile中忽略CFLAGS
EN

Stack Overflow用户
提问于 2014-10-31 16:37:55
回答 1查看 4.3K关注 0票数 4

我使用以下makefile来构建我的项目:

代码语言:javascript
复制
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,我会得到:

代码语言:javascript
复制
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解决了我的问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-17 16:21:45

你看到的原因

代码语言:javascript
复制
g++    -c -o main.o main.cpp

Make正在调用其标准规则来创建对象文件:

代码语言:javascript
复制
%.o: %.cpp
#  recipe to execute (built-in):
        $(COMPILE.cpp) $(OUTPUT_OPTION) $<

命令展开为

代码语言:javascript
复制
$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c -o $@ $<

与其在makefile中设置CCCFLAGS,不如设置CXXCXXFLAGS,这是为C++而不是C设置的,这允许上面的内置规则为您工作,然后您只需要确保正确的链接器被使用,例如

代码语言:javascript
复制
pnm: LINK.o=$(LINK.cc)
pnm: $(OBJ)

您也不需要%.o: %.c规则,因为您没有C源。

完整Makefile:

代码语言:javascript
复制
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: clean
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26679441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档