LINUX.ORG.RU

Требуется небольшой изврат с make


0

0

Помогите пожалуйста, всю голову уже сломал.

Есть внутри Makefile-a переменая вида CFLAGS = -Ddefine1 -Ddefine2 ...

Нужно автоматически сгенерировать фаил вида:

[code] #define define1 #define define2 [/code]

Мои попытки сделать что-то типа

[code] all: echo $(foreach flag, $(CFLAGS), $(subst -D, '#define ', $(flag)\n)) > file.h [/code]

Работает при выводе на консоль, но как появляется перенаправление в файл, \n просто вставляется без замены.

★★★★

code1:
#define define1
#define define2

code2:
all:
echo $(foreach flag, $(CFLAGS), $(subst -D, '#define ', $(flag)\n)) > file.h [/code]

alexru ★★★★
() автор топика

> all: echo $(foreach flag, $(CFLAGS), $(subst -D, '#define ', $(flag)\n)) > file.h

for i in $(CFLAGS); do echo $(echo $i | sed 's/-D/#define /'); done

Или ты лишенный приличного шелла вендузятнег?

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

> Или ты лишенный приличного шелла вендузятнег?

В том числе. Все должно быть кросс-платформено.

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

> Все должно быть кросс-платформено.

Тогда попробуй $(foreach flag, $(CFLAGS), $(shell echo $(subst -D, '#define ', $(flag)))). Даже в этой вашей венде есть echo.

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

$(foreach flag, $(CFLAGS), $(shell echo $(subst -D, '#define ', $(flag)) >> 1.h ))

Помогло, спасибо. Не сообразил, что $(shell можно вызывать внутри $(foreach.

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