2013-05-08 2 views
0

Я учусь писать make-файлы. Я сделал свой собственный простой один раз попробовать и тест, но каждый раз, когда я бег сделать, я получаю:Нет правила сделать цель в Maefile

make: *** No rule to make target `/%.cpp', needed by `obj'. Stop. 

Я гугл. Я уверен, что правильно набрал все, и мои папки настроены так, как они должны быть. Вот файл makefile:

CC = g++ 
LD = g++ 

NAME = app 
OBJ_DIR = obj 
SRC_DIR = src 

CC_FLAGS = -std=c++0x 

all: $(NAME) 

$(NAME): $(OBJ_DIR)/%.o 
    $(LD) $(OBJ_DIR)/%.o -o [email protected] 

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp 
    $(CC) $< -o [email protected] $(CC_FLAGS) 

clean: 
    rm $(NAME) $(OBJ_DIR) -rf 

В чем проблема?

ответ

1

Линия:

$(NAME): $(OBJ_DIR)/%.o 

не является правильным. Это не правило шаблона (потому что цель не содержит символа шаблона, %), и поэтому он интерпретируется как явное правило, говоря, что app зависит от фактического файла с именем obj/%.o, которого нет, и не делает знаете, как его построить (потому что нет файла src/%.cpp).

Вы должны изменить это:

$(NAME): $(OBJ_DIR)/foo.o ... 

или любых объектных файлов у вас есть.

+0

Да, это он. Спасибо. Я теперь не могу скомпилировать, потому что он игнорирует мой флаг C++ 0x, но это еще один вопрос, который я предполагаю. – darxsys

Смежные вопросы