Makefile, условный и подстановочный знак с переменными - PullRequest
0 голосов
/ 28 января 2020

У меня проблемы с моим make-файлом. Я хочу иметь "главную" цель, которая автоматически обрабатывает различные каталоги и копирует их в указанное c местоположение. Но почему-то условие ifneq с подстановочным знаком не работает должным образом, давая мне всегда один и тот же результат, независимо от того, выполняется условие или нет.

Я пытаюсь:

# Basically the same thing for all targets
% :
ifeq ($(wildcard $(TOP)/flow/$@),)
    $(error Directory $(TOP)/flow/$@ not found. Aborting. Debug: $(wildcard $(TOP)/flow/$@))
else
    $(error Directory $(TOP)/flow/$@ found!. Debug: $(wildcard $(TOP)/flow/$@))
endif

As Например, в $ (TOP) / flow существует каталог core , но не pwr . Цель Make действует так, как будто они оба существуют.

➜  work ✗ make core
Makefile:20: *** Directory TOPFOLDER/flow/core found!. Debug: TOPFOLDER/flow/core.  Stop.
➜  work ✗ make pwr 
Makefile:20: *** Directory TOPFOLDER/flow/pwr found!. Debug: .  Stop.

Почему это так? Здесь не видно, что я делаю не так.

Спасибо за помощь!

1 Ответ

1 голос
/ 29 января 2020

Переменная $@ пуста во время оценки ifeq.

Возможно, вместо этого используйте проверку во время выполнения:

% :
    test -d $(TOP)/flow/$@/
...