Я изучаю make-файлы. Что я пробовал, так это написать свой собственный после небольшого чтения. Проблема в том, что я всегда получаю ошибки, связанные со стандартом С++ 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.
А вот и makefile:
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 игнорирует мой флаг. Есть ли этому решение?
И да, я могу скомпилировать с флагом -std=c++0x без make, так что мой компилятор явно не проблема.
make
должен распечатывать каждую команду по мере ее выполнения. Какойg++
вызов непосредственно предшествует ошибке? - person cdhowie   schedule 08.05.2013g++ src/normal.c -o obj/normal.o -std=c++0x
- person cdhowie   schedule 08.05.2013test: echo $(SRC); echo $(OBJ)
(с новыми строками, где это уместно), а затем выполнитьmake test
. Возможно, содержимое этих переменных не соответствует вашим ожиданиям. - person cdhowie   schedule 08.05.2013