Makefile - перебрать список и выбрать конкретное значение - PullRequest
0 голосов
/ 17 августа 2011

Я пытаюсь сделать что-то вроде этого (предполагая, что $ input - это что-то, предоставленное пользователем):

LIST = pre1 pre2 pre3 pre4 pre5 pre6 pre7 pre8 pre9 pre10
START = 0

for prefix in $(LIST); do \
    if $(input) == $(prefix) then
        START = 1
    endif \
    if $(START) == 1 then \
        if [ -f  $(prefix)<file_name> ]; then <do_A>; else <do_B>; fi
    endif \
done

Моя проблема с двумя if, упомянутыми выше.я не знаю, как я могу выбрать конкретное строковое значение из списка при его итерации (если $ (input) == $ (prefix) затем), и я не знаю, как проверить, является ли значение 1 или 0 (если $ (START) == 1, то).

Я собираюсь использовать один и тот же make-файл для разных каталогов, имеющих одинаковое имя файла, но с другим префиксом.иногда каталог может содержать несколько версий файла с другим префиксом, и я хочу определить иерархию этих префиксов (определяется LIST в моем примере).когда пользователь предоставляет версию, идея состоит в том, чтобы начать поиск самой последней версии, начиная с версии, которую он предоставляет (например, если пользователь предоставляет pre4, то сначала мне нужно выполнить поиск pre4, и если она не существует - яя продолжу поиск pre5 и т. д., но в этом примере я не буду искать pre1, даже если он существует в текущем каталоге).

У каждого есть идея, как мне это сделатьчто?

Заранее спасибо.

1 Ответ

3 голосов
/ 19 августа 2011

Если предполагается, что это команда в Makefile, синтаксис должен выглядеть примерно так:

LIST = pre1 pre2 pre3 pre4 pre5 pre6 pre7 pre8 pre9 pre10
START = 0
input = somename
file_name = whatever

some_target:
    for prefix in $(LIST); do \
        if test "$(input)" = $$prefix; then \
            START=1; \
        fi; \
        if test "$(START)" = 1; then \
            if test -f  $$prefix$(file_name); then \
                <do_A>; \
            else \
                <do_B>; \
            fi; \
        fi; \
    done

Но вы не сказали нам, что идолжны быть, поэтому я предположил, что они являются другими make переменными.В основном правила make выглядят как одна длинная строка оболочки с командами, разделенными точкой с запятой, а строки продолжаются с обратной косой чертой.$$ заменяется на make одним $, поэтому ссылки на переменные оболочки (префикс $$) требуют двух долларов.

Ваше руководство по make (тип man make содержит всю историю иЭто интересно читать и понимать.) Станьте make гуру сегодня!Обязательно поймите разницу между переменной make и переменной shell .

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