C ++文件需要库支持

时间:2015-09-21 11:15:19

标签: c++ makefile

我试图从使用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的新手,但是非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

  1. CXX重写为CXX = g++
  2. CCFLAGS更改为CXXFLAGS = -g -std=c++11
  3. 将您的规则改写为$(CXX) $(CXXFLAGS) ...
  4. $(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规则。

    • $? - 被所有先决条件替换
    • $@ - 替换为目标名称