LINUX.ORG.RU

Задать соответствие без совпадений имен файлов

 ,


0

1

Есть ли возможность в make, задать соответсвие парам файлов - исходник -> результат, при условии что у файлов не должно быть общих частей имени?

Для наглядности:

 
SOURCES = \
src1.src \
src2.src \
src3.src

TARGETS = \
tgtA.tgt \
tgtB.tgt \
tgtC.tgt 

all:$(TARGETS)

$(TARGETS):$(SOURCES)
   #how to ??

Желательно сделать это без гнутых расширений. Если быть точнее, то это AIX'овский make.


К сожалению, никак, AIX-овский make не умеет функции замены строк. Только прегенерация этих целей в отдельном файле, например, и включение его в основной Makefile.

E ★★★
()
Ответ на: комментарий от legolegs

Пока их 3, да, это ок.

А если порядка 20, и это число имеет тенденцию расти, и цепочка превращений имеет длину >1, и процедура превращений потенциально может измениться?

batbko
() автор топика
Последнее исправление: batbko (всего исправлений: 1)

Зависимости можно задавать отдельно от правил.

$ cat Makefile a: b c: d a c: echo $@ $< $ touch b d $ make a echo a b a b $ make c echo c d c d

anonymous
()
Ответ на: комментарий от anonymous

Прошу прощения.

$ cat Makefile
a: b
c: d
a c:
        echo $@ $<
$ touch b d
$ make a
echo a b
a b
$ make c
echo c d
c d
anonymous
()
Ответ на: комментарий от batbko

Пока их 3, да, это ок.

А если порядка 20, и это число имеет тенденцию расти

Генерируй эту часть makefile-а sh-скриптом.

anonymous
()
Ответ на: комментарий от batbko

Даже при использовании генераторов тебе придётся задавать соответствие между исходниками и результатами. Мне любопытно как ты это планируешь делать?

anonymous
()
Ответ на: комментарий от anonymous

Дык ручками, делаешь мэп, делаешь костыль что бы его распарсить. Там просто для этого средства есть :)

Притом даже в gmake уже есть...

А вот IBM козлы, реализовали жалкий позикс. Хотя учитывая через какую задницу, я даже этот то make достаю, генерировать Makefile не самое печальное.

Хотя, на самом деле, есть альтернативный вариант - определять все переменные в shell скрипте, проводить необходимые манипуляции, а вот результат уже кормить make'у. Но это тоже так себе вариант.

batbko
() автор топика
Последнее исправление: batbko (всего исправлений: 1)
Ответ на: комментарий от batbko

Если у тебя сложная реальность, то нельзя её описать просто. Как бы ты не выкручивался, у тебя всё равно где-то будет файл, по смыслу эквивалентный тому, что мы с аноном посоветовали. Если ты спрячешь его за кучей велосипедов - ты не сделаешь свою жизнь проще.

legolegs ★★★★★
()
Ответ на: комментарий от legolegs

В ответ на это крайне филосовское высказывание - другое такое же:
Если бы, в этом мире всё обстояло бы таким образом, то все до сих пор писа ли бы на ассемблере:)

batbko
() автор топика
Ответ на: комментарий от anonymous

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

$ make -v | grep Make
GNU Make 3.81

batbko
() автор топика
Ответ на: комментарий от batbko

А, дык я туплю по утру. Да - решение от анона торт. Только вот хз сработает ли оно с aix make. Приду на ворк, проверю.

batbko
() автор топика
Ответ на: комментарий от batbko

Таки не работает оно с aix make. Ибо анон доку не читает - такой синтаксис, чисто гнутое расширение.

batbko
() автор топика
Ответ на: комментарий от batbko

В документации GNU Make о том, что это расширение не говорится ни в разделе, где это поведение описано, ни в разделе, где перечислены расширения.

К aix у меня доступа нет, тексты стандартов покупать — жаба душит.

Так, что:

  1. Прости, что решение не подошло
  2. И в какой доке, что я не прочитал, сказано, что это чисто гнутое расширение?
anonymous
()
Ответ на: комментарий от anonymous

Да,ничего страшного. В доке к gmake - явно не указанно что это расширение не входящее в posix. Ибо чуть менее чем половина этого gmake - это расширение:)

А дока по make в свою очередь гласит:

Applications shall select target names from the set of characters consisting solely of periods, underscores, digits, and alphabetics from the portable character set (see the Base Definitions volume of IEEE Std 1003.1-2001, Section 6.1, Portable Character Set). Implementations may allow other characters in target names as extensions. The interpretation of targets containing the characters '%' and '«' is implementation-defined.

Что значит - что во первых никто не обязан это имплементить, а во вторых, нет гарантии что оно будет работать так или иначе.

Вот такой он этот позикс вообще и добряки IBM в частности :)

Ну да, и насчет расширения, я загнул - извини, это скорее implementation defined behaviour.

batbko
() автор топика
Последнее исправление: batbko (всего исправлений: 2)
Ответ на: комментарий от batbko

Про то, что

tgt%:

чисто гнутое расширение, тоже не нашёл.

Что pattern rules есть не везде — забыл. Но если верить документации gnu make, то это не специфичное для него расширение.

anonymous
()
Ответ на: комментарий от beastie

А вот эта фича в aix make не пашет, хотя в доке и прописанна, прямо на их сайте :)

Я тоже сначала обрадовался. Не понятно почему, просто бессмысленно и беспощадно - пробовал пример из доки и несколько других вариаций. Если быть точнее - то сама сборка инициируеться, а вот в $< - пусто.

Ещё один лучик поноса в сторону молодчиков из IBM :)

batbko
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.