создание проекта makefile с несколькими файлами .c - PullRequest
0 голосов
/ 13 мая 2018

У меня есть следующая структура проекта (с использованием Eclipse)

project/
 |____ inc/
 |       |___ config_prog.h
 |       |___ prog_lib.h
 |
 |____ data/
 |       |___ img.bmp
 |
 |__ prog_lib.c
 |__ main.c
 |__ makefile

И я сделал следующий make-файл:

CC=gcc
CFLAGS= -O0 -c -Wall -mavx2 -mfma
LDFLAGS=

SOURCES=$ main.c inc/prog_lib.c
OBJECTS=$(SOURCES:.c=.o)

EXECUTABLE=main

all: $(TASKMAP) $(SOURCES) $(EXECUTABLE)

$(EXECUTABLE): $(OBJECTS) 
    $(CC) $(LDFLAGS) $(OBJECTS) -o $@ -lm

.c.o:
    $(CC) $(CFLAGS) $< -lm -o $@

clean: 
    rm -fr $(OBJECTS) $(EXECUTABLE)

но когда я пытаюсь построить проект, я получаю следующую ошибку: make: *** No rule to make target 'inc/prog_lib.c', needed by 'all'. Stop.

Может кто-нибудь сказать мне проблему?

1 Ответ

0 голосов
/ 13 мая 2018

Узнайте больше о GNU make и найдите время, чтобы прочитать документацию .

Ваше присвоение переменной

 SOURCES=$ main.c inc/prog_lib.c

неверно.Это должно быть

 SOURCES= main.c prog_lib.c

Возможно, вам также понадобится (лучше попросить -g, чтобы упростить отладку с помощью gdb)

CFLAGS= -O0 -c -Wall -g -mavx2 -mfma -Iinc

Попробуйте также make -p понимать встроенные правила.Вы должны использовать их лучше (и тогда использование -c в вашем CFLAGS, вероятно, неправильно).

Подумайте об использовании римейка , возможно, как remake -x, для отладки вашего Makefile;или, по крайней мере, make --trace.

Кстати, я считаю, что ваша файловая иерархия слишком сложна и неуместна.Для такого простого и небольшого проекта, каталог inc/ не стоит боли.

Для вдохновения изучите Makefile некоторых существующих свободных программ , например, на GitHub .

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