2013-07-09 4 views
0

Итак, я новичок в make-файлах, и я ужасен в командной строке. Поэтому я хочу убедиться, что мой синтаксис верен.Попытка выяснить, как сделать Makefiles

У меня есть три файла:

main.cpp 
Blob.cpp 
Blob.h 

Я хотел бы создать файл (в блокноте или что-то) называется makefile.make и в нем текст следующего содержания:

all: 
g++ main.cpp Blob.cpp Blob.h -o hello 

тогда я бегу командная строка

make 

И файл будет создан? Это верно? Все они находятся в одном каталоге, а также некоторые другие папки, которые VS2012 там вставлял.

+0

(1) Вероятно, вы не хотите указывать '.h' файл в командной строке и * do * хотите указать его как зависимость. (2) Вы не пользуетесь преимуществами 'make' здесь; дело в том, что 'make' может заметить, когда зависимости новее, чем их иждивенцы, и тем самым знать, какая работа должна быть выполнена. – dmckee

+0

@ dmckee ты меня немного потерял. Что мне нужно изменить для правильного синтаксиса? –

ответ

-1

Google "makefile tutorial", и вы найдете множество сайтов.

Команды для запуска должны предшествовать Tab символ а, поэтому она должна быть:

all: 
     g++ main.cpp Blob.cpp -o hello 

Убедитесь, что вы не используете редактор, который преобразует Вкладка символы пробелами.

+0

Опять же, это * всегда * восстанавливает цель, даже если это не нужно, за исключением того, что командная строка неверна: заголовочный файл не следует называть. – dmckee

+1

@dmckee Я уже удалил файл .h. Я согласен, что это будет перекомпилировать безоговорочно, в этом нет вреда. Когда он узнает больше о make-файлах, он может использовать условную компиляцию. – Barmar

1

попробовать этот

hello:main.cpp Blob.cpp 
[TAB] g++ main.cpp Blob.cpp -o hello 

Name как Makefile или makefile. Вы можете запустить только make, чтобы построить его. Иначе назвать это все, что угодно, исключая mymakefile и run make -f mymakefile построить его

Получить свежий с basic makefile rules

+0

no it wont. beacause имя цели приветствия. который является именем выходного файла. –

+0

Ах, вы правы. Убирались. – dmckee

1

Если вы просто хотите, чтобы восстановить исполняемый файл, когда каждый любой файл изменился, используйте

all: hello 

hello: main.cpp Blob.cpp Blob.h 
    g++ -o hello main.cpp Blob.cpp 

If вам нужна отдельная компиляция

all: hello 

hello: main.o Blob.o 
    g++ -o hello main.o Blob.o 

main.o: main.cpp Blob.h 
    g++ -o main.o main.cpp 

Blob.o: Blob.cpp Blob.h 
    g++ -o Blob.o Blob.cpp 

В обоих случаях мы скажем, какой файл зависит от ncies (т. е. если эти файлы меняются, нам нужно перестроить) в дополнение к указанию выполняемой работы.

+0

'all: hello' is redundant –

+0

@SagarSakre Это избыточно, но это также распространенная идиома, потому что (когда вы знаете больше) она позволяет вам использовать переменную, чтобы указать зависимости целевой цели по умолчанию. – dmckee

+0

Да вообще правило правила makefile используется. для текущей проблемы мы можем ее игнорировать –

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