Написание make файла для проекта с несколькими расположенными папками

У меня есть makefile ниже и дерево каталогов:

→ проект /src/main.c, func.c, Makefile

→ Проект /EXE/

→ Проект/вкл/

→ Проект/объект/

cc=gcc
 cflags=-c
 obj=../obj
 exe=../exe
 inc=../inc
 prog.exe: main.o func.o
 $(cc) main.o func.o -o $(exe)/prog.exe
 main.o: main.c $(inc)/defs.h
 $(cc) $(cflags) main.c
 mv main.o $(obj)/
 func.o: func.c $(inc)/defs.h
 $(cc) $(cflags) func.c
 mv func.o $(obj)/

Проблема в том, что второе действие ниже main.o и func.o (те, которые начинаются с mv) не работают (т.е. main.o не перемещается в каталог /obj). Есть ли проблема в синтаксисе makefile или что-то еще?

2 ответа

Одна очевидная проблема заключается в том, что make файл не создает цели, которые он должен строить. То есть:

prog.exe: main.o func.o
 $(cc) main.o func.o -o $(exe)/prog.exe

Не создает prog.exe, а строит $(exe)/prog.exe, который является другим файлом. Исправление:

$(exe)/prog.exe: $(obj)/main.o $(obj)/func.o
 $(cc) $^ -o $@

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


Вы можете позаботиться о вдавливании с помощью make. Для этого нужны реальные вкладки.

См. Https://superuser.com/questions/224434/what-is-the-character-used-to-indent-the-make-file-rule-recipe

licensed under cc by-sa 3.0 with attribution.