Какова правильная или эффективная форма для написания Makefile, когда вам нужны два исполняемых файла, которые используют одну и ту же библиотеку? - PullRequest
0 голосов
/ 01 апреля 2019

Я пытаюсь написать Makefile для компиляции двух программ, включающих один и тот же .h (тоже мой), но с моим настоящим Makefile, если я дважды наберу «make» в командной строке, я не получаю«Бла-бла в курсе», он перекомпилирует часть материала, когда в этом нет необходимости.Любой способ сделать это в более эффективной форме?

Context

producer.c и consumer.c #include random_numbers.h, чтобы генерировать случайные числа для его функций.

Мой Makefile

CC = gcc
FLAGS = -Wall -g
LIBS = -lrt -lpthread
HEADER_FILES_DIR = .
INCLUDES = -I $(HEADER_FILES_DIR)
SRCS = e1_producer.c e1_consumer.c $(HEADER_FILES_DIR)/random_num.c
OBJ = $(SRC:.c=.co)
DEPS = $(HEADER_FILES_DIR)/random_num.h


all: e1_producer e1_consumer

random_num.o: random_num.c random_num.h
    $(CC) $(FLAGS) -c random_num.c

e1_producer: e1_producer.o random_num.o
    $(CC) $(FLAGS) -o producer e1_producer.o random_num.o $(LIBS)

e1_producer.o: e1_producer.c
    $(CC) $(FLAGS) -c e1_producer.c $(LIBS)

e1_consumer: e1_consumer.o random_num.o
    $(CC) $(FLAGS) -o consumer e1_consumer.o random_num.o $(LIBS)

e1_consumer.o: e1_consumer.c
    $(CC) $(FLAGS) -c e1_consumer.c $(LIBS)

clean:
    rm producer consumer *.o

Вывод после двух последовательных "make" в командной строке

$ make
$ gcc -Wall -g -c e1_producer.c -lrt -lpthread
$ gcc -Wall -g -c random_num.c
$ gcc -Wall -g -o producer e1_producer.o random_num.o -lrt -lpthread
$ gcc -Wall -g -c e1_consumer.c -lrt -lpthread
$ gcc -Wall -g -o consumer e1_consumer.o random_num.o -lrt -lpthread
$ make
gcc -Wall -g -o producer e1_producer.o random_num.o -lrt -lpthread
gcc -Wall -g -o consumer e1_consumer.o random_num.o -lrt -lpthread

Почему это происходит?Когда я делаю то же самое с другой отдельной программой, вторая $ make возвращает мне «ничего не делать, бла-бла в курсе»

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