我正在学习makefile。我试过的是在阅读一小段文字后写下自己的一本。问题是,即使我把需要的编译器标志放到makefile中,我总会得到与C++ 11标准相关的错误。以下是错误:Makefile C++ 11错误
/usr/include/c++/4.6/bits/c++0x_warning.h:32:2: error:
#error This file requires compiler and library support for the upcoming
ISO C++ standard, C++0x. This support is currently experimental, and
must be enabled with the -std=c++0x or -std=gnu++0x compiler options.
这里是生成文件:
CC = g++
LD = g++
NAME = app
OBJ_DIR = obj
SRC_DIR = src
CXX_FLAGS = -std=c++0x
SRC = $(shell find $(SRC_DIR) -type f -regex ".*\.cpp")
OBJ = $(subst $(SRC_DIR), $(OBJ_DIR), $(addsuffix .o, $(basename $(SRC))))
all: $(NAME)
$(NAME): $(OBJ)
$(LD) $< -o [email protected] $(CXX_FLAGS)
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp
$(CC) $< -o [email protected] $(CXX_FLAGS)
clean:
rm $(NAME) $(OBJ_DIR) -rf
请注意,我已经把CXX_FLAGS检查出的堆栈溢出的其他问题后,但无济于事。我仍然得到同样的错误。这就像make忽略我的国旗。有针对这个的解决方法吗?
是的,我可以用-std = C++ 0x标志编译而不make,所以我的编译器显然不是问题。
'make'应该在执行时输出每条命令。什么'g ++'调用立即出现在错误之前? – cdhowie 2013-05-08 15:54:20
@cdhowie g ++ -c -o src/normal.o src/normal.cpp 它看起来像忽略我的国旗。 – darxsys 2013-05-08 15:55:28
所以这个问题根本不在C++ 11标志中。你的实际问题是“为什么我的makefile规则不被使用”。如果是这样的话,我希望该行是'g ++ src/normal.c -o obj/normal.o -std = C++ 0x' – cdhowie 2013-05-08 15:56:15