G ++似乎没有认识到-std = c ++ 11

时间:2016-03-01 15:05:42

标签: c++ c++11 makefile

我使用给定的标志<div class="wrapper"> <!-- HEADER, SAME ON ANY SITE --> <div class="header"> <header> <h1>Oblivion</h1> <p>Headline</p> </header> <div class="hr"></div> <nav> <!-- Codepen.io cant handle links, so i disabled them --> <a href="#" id="active">home</a> <a href="#">info</a> <a href="#">roster</a> <a href="#">more...</a> </nav> <div class="hr"></div> </div> <!-- HEADER END --> <div class="main"> <div class="content"> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> <p>TEST 123</p> </div> </div> </div>编译我的代码,并且我得到各种错误,描述我应该使用相同的标志。此外,$get_thoughts_from_db = mysqli_query($connect, "SELECT * FROM user_thoughts INNER JOIN users ON user_thoughts.added_by = users.username ON ORDER BY id DESC"); // newest posts first 无法识别为类型。

生成文件:

-std=c++11

我得到的警告和错误:

auto

现在我的问题是:我应该怎样做才能让g ++在给定标志的情况下清楚地认识到这一点? 我也尝试用GCCPATH = /path/gcc/5.3.0 CC = $(GCCPATH)/bin/g++ DARGS = -ggdb #debug arguments CARGS = -std=c++11 #C arguments WARGS = -Wall -Wextra #warning arguments AARGS = $(DARGS) $(CARGS) $(WARGS) #all arguments GCCLIBPATH = $(GCCPATH)/lib64 LIBS = -l curl LIBD = -L $(GCCLIBPATH) -Wl,-rpath=$(GCCLIBPATH) .PHONY: webspider webspider: ../title/htmlstreamparser.o filesystem.o $(CC) $(AARGS) -o $@ $@.cpp $+ $(LIBS) $(LIBD) filesystem: $(CC) $(AARGS) -c $@.cpp 替换它,但没有用。

编辑:
完整输出warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 warning: range-based ‘for’ loops only available with -std=c++11 or -std=gnu++11 error: ‘weblink’ does not name a type for(auto weblink: weblinks)

-std=c++0x

2 个答案:

答案 0 :(得分:5)

问题是您没有指定所有依赖项,特别是如何构建所有中间目标文件

所以会发生什么,make制定了自己的规则,并在你不看的时候无形地偷偷溜进去。

控制这些implicit rules的方法是设置正确的predefined variables

CXX := $(GCCPATH)/bin/g++      # c++ compiler
CPPFLAGS := -I/path/to/headers # preprocessor flags
CXXFLAGS := -std=c++11         # compiler flags
LDFLAGS := -L/path/to/libs     # linker flags
LDLIBS := -lcurl               # libraries to link
# etc...

通过使用正确的预定义变量,而不是自己制作变量,可以在构建Makefile时节省大量工作。

答案 1 :(得分:0)

最后,根据评论,通过更改

来修复
filesystem:
    $(CC) $(AARGS) -c $@.cpp

filesystem.o: filesystem.cpp
    $(CC) $(AARGS) -c $+

因为Makefile不明白我试图使用规则filesystem.o制作filesystem: ...。当明确说明时,它按预期工作。

这种方法优于Galik的答案是能够使用自己的变量,虽然在这种情况下没有那么大的优势,因为它是一个小项目。