【发布时间】:2013-05-08 15:52:13
【问题描述】:
我正在学习 makefile。我尝试的是在阅读后写自己的。问题是,我总是遇到与 c++11 标准相关的错误,即使我将所需的编译器标志放入 makefile。这是错误:
/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 $@ $(CXX_FLAGS)
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp
$(CC) $< -o $@ $(CXX_FLAGS)
clean:
rm $(NAME) $(OBJ_DIR) -rf
请注意,在检查了有关堆栈溢出的其他问题后,我已将 CXX_FLAGS 放入,但无济于事。我仍然得到同样的错误。就像make忽略了我的标志。有解决办法吗?
是的,我可以在不使用 make 的情况下使用 -std=c++0x 标志进行编译,所以我的编译器显然不是问题。
【问题讨论】:
-
make应该在执行每个命令时打印出它。错误之前的g++调用是什么? -
@cdhowie g++ -c -o src/normal.o src/normal.cpp 好像忽略了我的flag。
-
所以问题根本不在于 C++11 标志。您的实际问题是“为什么不使用我的 makefile 规则”。如果是的话,我希望这条线是
g++ src/normal.c -o obj/normal.o -std=c++0x -
随机猜测:你需要$(CXX_FLAGS) 在$
-
好吧,我是初学者。谢谢指正。有任何想法吗? @MatsPetersson 不。试过了。
标签: c++ c++11 makefile gnu-make