我试图从使用condition_variable类的终端编译一个简单的程序。在构建时,我收到以下错误:
此文件需要ISO C ++ 2011标准的编译器和库支持。此支持目前是实验性的,必须使用
-std=c++11
或-std=gnu++11
编译器选项启用。
在研究此错误here时,我在make文件中添加了必要的标记,但我仍然遇到同样的错误。
这是我的makefile:
CXX= g++ $(CCFLAGS)
MAIN= main.o
DATACLASS= dataclass.o
OBJS = $(MAIN) $(DATACLASS)
LIBS= -pthread
CCFLAGS= -g -std=c++11
all: main
main: $(MAIN) $(DATACLASS)
$(CXX) -o main $(MAIN) $(DATACLASS) $(LIBS)
dataclass: $(DATACLASS)
$(CXX) -o dataclass $(DATACLASS) $(LIBS)
clean:
rm -f $(OBJS) $(OBJS:.o=.d)
realclean:
rm -f $(OBJS) $(OBJS:.o=.d) main
%.d: %.cc
$(SHELL) -ec '$(CC) -M $(CPPFLAGS) $< \
| sed '\''s/\($*\)\.o[ :]*/\1.o $@ : /g'\'' > $@; \
[ -s $@ ] || rm -f $@'
include $(OBJS:.o=.d)
我确定我错过了一些小而愚蠢的东西,因为我是makefiles的新手,但是非常感谢任何帮助。
答案 0 :(得分:2)
CXX
重写为CXX = g++
CCFLAGS
更改为CXXFLAGS = -g -std=c++11
和$(CXX) $(CXXFLAGS) ...
。 $(CXX) $(CXXFLAGS)
将替换为g++ -g -std=c++11
。这更像是定义makefile
的标准方法。以下是生成的makefile
。
CXX = g++
MAIN = main.o
DATACLASS = dataclass.o
OBJS = $(MAIN) $(DATACLASS)
LIBS = -pthread
CXXFLAGS = -g -std=c++11
all: main
main: $(OBJS)
$(CXX) $(CXXFLAGS) $? -o $@ $(LIBS)
作为旁注,您确定应该如此定义此规则吗?
dataclass: $(DATACLASS)
$(CXX) $(CXXFLAGS) $? -o $@ $(LIBS)
目标不是dataclass.o
还是$(DATACLASS)
,先决条件是其他文件?
注意:我还添加了一些make
automatic variables来整理makefile
规则。
$?
- 被所有先决条件替换$@
- 替换为目标名称