我有两个文件:main.cpp,包括foo.h.我需要一个使用-std = c ++ 11标志编译它们的makefile,但我不知道为什么第一个makefile设置了标志但第二个没有设置标志。
使用:
CXX=g++
CXXFLAGS=-g -std=c++11 -Wall -pedantic
BIN=prog
SRC=$(wildcard *.cpp)
OBJ=$(SRC:%.cpp=%.o)
all: $(OBJ)
$(CXX) -o $(BIN) $^
%.o: %.c
$(CXX) $@ -c $<
clean:
rm -f *.o
rm $(BIN)
不起作用:(c ++ 11实际上没有标记,因此无法使用c ++ 11)
CXX=g++
CXXFLAGS=-g -std=c++11
all:
g++ main.cpp -o main
答案 0 :(得分:4)
由于您的第一个makefile没有从.o
生成.cpp
的规则,因此使用了隐式规则。该规则类似于:
%.o: %.cpp
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $< $@
您可以在GNU Make here中找到所有隐式规则。
您的第二个makefile没有使用此规则,因为all
规则直接编译main
,而不是依赖main.o
。由于您使用的是显式规则,因此您还需要明确使用该变量。
all:
$(CXX) $(CXXFLAGS) main.cpp -o main