Использование Makefile для запуска нескольких программ - PullRequest
0 голосов
/ 19 ноября 2018

Всякий раз, когда я пытаюсь запустить это, единственный вывод, который я получаю, это «make: foo.o обновлен».Кажется, что остальная часть программы не запускается, и я не знаю, почему.Мои инструкции следующие: «Скомпилируйте программу на C. Запустите программу на C. Запустите программу на Python. Скомпилируйте и запустите Java-программу. Проверьте README, отобразите его. Сравните 2 файла. Очистите промежуточные файлы."

cc = gcc
EXE = foo
JAVAC = javac
JRE = java
PAGER = less
TEST_OUT = test.out
EXP_OUT = expected.out

foo.o: foo.c foo.h
        $(cc) -c foo.c

main.o: main.c foo.h
        $(cc) -c main.c

$(EXE): foo.o main.o
        $(cc) -o$(EXE) main.o foo.o

run-c: $(EXE)
        ./$(EXE)

run-py:
        ./foo.py

read: README
        $(PAGER)

foo.class: foo.java
        $(JAVAC) foo.java

run-java: foo.cass
        $(JRE) foo

save-java:
        ./(run-java) >> $(TEST_OUT)

test-java: $(TEST_OUT) $(EXP_OUT)
        @if diff $(TEST_OUT) $(EXP_OUT) &> /dev/null ; then \
                echo "Passed!" ;\
        else \
                echo "Not the same!" ;\
        fi

clean:
        -rm test.out

1 Ответ

0 голосов
/ 19 ноября 2018

Всякий раз, когда я пытаюсь запустить это, единственный вывод, который я получаю, это "make: foo.o обновлен."

По умолчанию make запускает самое верхнее правилокогда цель не указана.Например, вы должны запустить make run-c, чтобы вызвать соответствующий рецепт, или вы можете просто поставить правило all перед любыми другими, которые зависят от и делает все.

read: README
        $(PAGER)

Я подозреваю, что вы, возможно, не указали $@ после $(PAGER) в качестве аргумента.

save-java:
    ./(run-java) >> $(TEST_OUT)

Вы не можете просто "включить" другиерецепты таким образом.Вместо этого повторите то, что в run-java и добавьте перенаправление.

Если вы хотите указать «псевдо» цели, я рекомендую вам указать их как .PHONY, например:

.PHONY: all run-c run-py run-java save-java test-java clean

Чтобы пометить некоторые цели как промежуточные файлы, используйте директиву .INTERMEDIATE.Руководство по GNU Make (texinfo) доступно как онлайн , так и с помощью команды info.

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