2013-04-05 2 views
0

Я написал простую программу на C++ и в первый раз хочу ее скомпилировать и связать с помощью makefile. В качестве задачи я хочу создать make-файл, в котором перечислены все зависимости самостоятельно. Я следую this учебник. Моя программа состоит из main.cpp, ext1.cpp и ext1.h. После урока, у меня есть следующие Makefileстроительная программа с make и автоматическими зависимостями

VPATH = src include 

CPPFLAGS = -o include 

CC = gcc 

SOURCES = main.cpp \ 
     ext1.cpp 



-include $(subst .c,.d,$(SOURCES)) 



%.d: %.c 
    $(CC) -M $(CPPFLAGS) $< > [email protected]$$$$;      \ 
    sed 's,\($*\)\.o[ :]*,\1.o [email protected] : ,g' < [email protected]$$$$ > [email protected];  \ 
    rm -f [email protected]$$$$ 

Когда я запускаю это я получаю сообщение: make: *** No targets specified and no makefile found. Stop. Это не для меня ясно, что мне не хватает в моем случае?

+0

Действия должны быть с приставкой TAB. Пробелы не будут работать. Может ли это так? – suspectus

+0

@suspectus Спасибо за предложение - я убедился, что все они были TAB перед тестированием – BillyJean

+2

Не вдаваясь в подробности, ваши исходные файлы: '.cpp', но вы пытаетесь использовать зависимостей' .c' ... – lapk

ответ

2

Вы пытаетесь сделать слишком много сразу.

Шаг 1. Ваш первый Makefile должен построить исполняемый без попытки автоматического обнаружения зависимостей.

VPATH = include src 
CPPFLAGS += -Iinclude 
CC = gcc 

exec: main.o ext1.o 
    $(CC) $^ -o [email protected] 

%.o: %.cc 
    $(CC) -c $(CPPFLAGS) $< -o [email protected] 

main.o ext1.o: ext1.h 

Шаг 2. После того, что отлично работает, вы можете поместить зависимости заголовков в отдельных файлах:

Makefile:

VPATH = include src 
CPPFLAGS += -Iinclude 
CC = gcc 

exec: main.o ext1.o 
    $(CC) $^ -o [email protected] 

%.o: %.cc 
    $(CC) -c $(CPPFLAGS) $< -o [email protected] 

-include *.d 

main.d:

main.o : ext1.h 

ext1.d:

ext1.o: ext1.h 

Шаг 3. После того, какчто работает отлично, вы можете создавать файлы зависимостей автоматически:

VPATH = include src 
CPPFLAGS += -Iinclude 
CC = gcc 

exec: main.o ext1.o 
    $(CC) $^ -o [email protected] 

%.o: %.cc 
    $(CC) -c -MMD $(CPPFLAGS) $< -o [email protected] 

-include *.d 
1

не делают файл найден? какое имя вы дали для makefile? убедитесь, что его makefile или Makefile, если вы только выполнение команды make еще можно передать имя файла make как этот

make -f yourmakefile 

и изменения, предложенные Петром Будник должны работать

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