“Никакая целевая” ошибка с помощью Не Делает

Учитывая Ваши ответы в комментариях, проблема состоит в том, что программа "ssh-агент" не может загрузить библиотеку libfipscheck, в котором это нуждается для выполнения. Быстрое исправление должно отредактировать Ваш .xinitrc файл и прокомментировать вызов к ssh-агенту от него. Реальная фиксация должна переустановить fipscheck-lib пакета.

12
05.07.2014, 18:38
2 ответа

Проблема:

Ваша проблема в том, что make не знает о ваших целях.

Вы можете запустить вышеприведенный Makefile, например, с помощью make stackoverflow.markdown, и он сработает. Однако, только

make не сработает, так как вы только указывали, как создавать свои цели, но не указывали, какие.

Так как leiaz point's out, вышеприведенное шаблонное правило называется неявным правилом .

Makefile:

SRC = $(wildcard *.html)
TAR = $(SRC:.html=.markdown)

.PHONY: all clean

all: $(TAR)

%.markdown: %.html
    pandoc -o $< $@

clean:
    rm -f $(TAR)

Explanation:

SRC получает все исходные файлы (заканчивающиеся на .html) с помощью шаблона Makefile wildcard.

TAR заменяет каждый исходный файл, перечисленный в SRC, целевым файлом, заканчивающимся на .markdown, вместо .html.

.PHONY перечисляет нефизические цели, которые всегда устарели и поэтому всегда выполняются - это часто все и чистые .

Цель все имеет в качестве зависимостей (файлы, перечисленные справа от : ) все файлы *.markdown. Это означает, что все эти цели выполнены.

%.markdown: %.html
    pandoc -o $< $@

Этот фрагмент говорит: Каждая цель, заканчивающаяся на .markdown, зависит от файла с тем же именем, за исключением того, что зависимость заканчивается на .html. Символ подстановки % должен рассматриваться как *, как в shell'е. Однако % с правой стороны сравнивается со спичкой с левой стороны. Source.

Обратите внимание , что последовательность пробельных символов перед pandoc является TAB, поскольку делает определение этого как стандарта.

Наконец, фальшивая чистая цель изображает, как очистить вашу систему от файлов, которые вы создали с помощью этого Makefile. В этом случае он удаляет все цели (те файлы, которые были названы *.markdown).

17
27.01.2020, 19:55

Шаблонные правила - это неявные правила.

У вас нет целей, определенных в вашем Makefile. Вы можете указать цель в командной строке: make something.markdown будет использовать рецепт для создания чего-либо.уценка из something.html .

Или вы можете добавить в свой Makefile правило, определяющее цели по умолчанию.

all: file1.markdown file2.markdown

Или с подстановочным знаком:

all: *.markdown

Когда вы запускаете только make , , первая цель первого правила является целью по умолчанию . Необязательно называть все .

Итак, у цели all есть все файлы, которые вы хотите создать в качестве предварительных условий, поэтому, когда вы создадите все , он создаст все перечисленные файлы.

5
27.01.2020, 19:55

Теги

Похожие вопросы