C++11 在Makefile中忽略cflag

C++11 在Makefile中忽略cflag,c++11,makefile,C++11,Makefile,我正在使用以下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 $< 编辑:将规则%.o:%.c

我正在使用以下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 $<
编辑:将规则
%.o:%.c
替换为
%.o:%.cpp
修复了我的问题。

您看到的原因

g++    -c -o main.o main.cpp
Make正在调用其标准规则来创建对象文件:

%.o: %.cpp
#  recipe to execute (built-in):
        $(COMPILE.cpp) $(OUTPUT_OPTION) $<
您也不需要
%.o:%.c
规则,因为您没有c源


完整的生成文件:

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

你能试着用
-Bn
给make打一次电话吗?(试运行,全部重建)正常。。。我解决了这个问题。如果我使用C++文件,当然不会出现规则<代码> %.o:%.c>代码>。很抱歉谢谢你给我指出
make-Bn
。正如你在我问题的评论中所看到的,这个错误与无效规则有关。您的解决方案是错误的,因为使用的变量也可能被命名为HANNI和NANNI,因为它们是显式使用的(
$(CC)$(CFLAGS)-c$,感谢您更新答案。接受。
$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c -o $@ $<
pnm: LINK.o=$(LINK.cc)
pnm: $(OBJ)
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