Как исправить ошибку "make: 'all' в актуальном состоянии" при выполнении команды make в Linux? - PullRequest
0 голосов
/ 18 апреля 2019

В настоящее время я использую код, который запускает OCR. Я связал 5 других программ с ним. Я должен сказать, что это не мой код, я скачал его отсюда https://github.com/PiotrKala/OCR?files=1

Я переименовал свой файл makefile с расширением mk. Я также заменил пробел между символами табуляции между «all» и «main» и исправил ошибку «make: Ничего не сделать для« all »».

CC=gcc
PTHREAD=-lpthread
CCFLAGS=-w

all:    main


main:
    $(CC) $(CCFLAGS) -o main main.c LibBMP.c  skeleton.c extractor.c $(PTHREAD)

clean:
    rm main

test:
    ./main ../examples/sample.bmp
    @echo 
    cat output.txt
    @echo
    cat final.txt

Я бы сказал, что ожидаемый результат - открытие output.txt.

Ответы [ 3 ]

1 голос
/ 18 апреля 2019

Если вы хотите, чтобы часть cat output.txt работала, вы должны вызвать цель test, например:

make test

Если вы просто выполните make, то это даст alltarget, потому что это стоит первым в make-файле.

0 голосов
/ 18 апреля 2019

Ничего не поделаешь для ошибки «все».

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

Вы также должны добавить предварительные условия к некоторым из ваших правил.Как только программа собрана, отсутствие предварительных требований означает, что make не сможет определить, когда цель устарела.Например, редактирование main.c не вызовет сборку.Может быть что-то вроде:

CC=gcc
PTHREAD=-lpthread
CCFLAGS=-w

all: main

main: main.c LibBMP.c skeleton.c extractor.c
    $(CC) $(CCFLAGS) -o main main.c LibBMP.c  skeleton.c extractor.c $(PTHREAD)

clean:
    rm main

test: main
    ./main ../examples/sample.bmp
    @echo 
    cat output.txt
    @echo
    cat final.txt

Это выглядит необычно.Нет переменной с именем CCFLAGS.

main:
    $(CC) $(CCFLAGS) ...

Обычно ваш рецепт выглядит примерно так:

CFLAGS = -g -w
CCFLAGS = -I. $(CFLAGS)

main:
    $(CC) $(CPPFLAGS) $(CCFLAGS) ...

Использование CFLAGS и CCFLAGS делает две вещи.Во-первых, он предоставляет значение по умолчанию для CFLAGS.Во-вторых, он позволяет пользователю переопределить CFLAGS, предоставляя при этом необходимые параметры, хотя CCFLAGS.

Также см. GNU Make |10.3 Переменные, используемые неявными правилами и Стандарты кодирования GNU |7.2.3 Переменные для указания команд .

0 голосов
/ 18 апреля 2019

Имя цели может конфликтовать с вашим выходным именем.

Попробуйте добавить это в Makefile:

.PHONY: all main

.PHONY сообщает Make, что цели не связаны с файлами

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