Написание make-файла для проекта с несколькими упорядоченными папками - PullRequest
0 голосов
/ 28 февраля 2012

У меня есть make-файл ниже и дерево каталогов:

-> project / src / main.c, func.c, Makefile

-> project / exe /

-> project / inc /

-> project / obj /

  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).Есть ли проблема в синтаксисе make-файла или чего-то еще?

Ответы [ 2 ]

1 голос
/ 28 февраля 2012

Одной из очевидных проблем является то, что 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 $@

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

0 голосов
/ 28 февраля 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...