Как определить переменные Makefile из скрипта Perl? - PullRequest
2 голосов
/ 27 апреля 2010

Я создаю Makefile, который я хочу, чтобы он был одним файлом для разных архитектур, операционных систем, библиотек и т. Д. Для этого у меня есть специальный файл XML для сборки, который определяет различные параметры конфигурации для каждой архитектуры. Файл конфигурации читается Perl (это может быть любой язык), и вывод Perl возвращает что-то вроде:

var1 := var1_value
var2 := var2_value
var3 := var3_value

То, что я пытаюсь сделать, это определить эти переменные в моем Makefile. Из make-файла я вызываю мой скрипт readconfig, и он дает правильный вывод, но я не смог получить эти переменные как часть моего Makefile. Я пробовал использовать eval и value, но ни один из них не сработал (хотя это может быть проблемой из-за того, что я не знаю, как их использовать. В целом, что я пытаюсь сделать, это что-то вроде:

read_config:
     $(eval (perl '-require "readConfig.pl"'))
     @echo $(var1)

Можно предположить, что я использую только поведение GNU Make. Вещи, которые я не мог изменить:

  • Файл конфигурации находится на XML
  • Использование Perl в качестве анализатора XML

Ответы [ 3 ]

5 голосов
/ 27 апреля 2010

Я думаю, что вы ищете директиву 'include':

include config.mk

...rest of makefile...

Ваш скрипт генерирует файл config.mk; Makefile читает это. Если вам нужно, чтобы make-файл запускал генератор, он становится более сложным:

MAKEFILE_INCLUDE = dummy.mk
include ${MAKEFILE_INCLUDE}

all: normal dependencies for target

config: config.mk
        perl make-config.pl > config.mk
        ${MAKE} MAKEFILE_INCLUDE=config.mk

Сначала вы запустите make config (только с пустым или почти пустым dummy.mk файлом). Затем он запустит make. Проще, если ты не попробуешь это; другие цели, кроме all, становятся хитрыми и т. д. Есть способы, но они все больше искажаются.

3 голосов
/ 27 апреля 2010

Нет необходимости иметь config.mk в качестве явной цели; если вы включите его, Make сделает это (при необходимости):

-include config.mk

all: real_targets

config.mk: xml_file
    perl make-config.pl > $@
1 голос
/ 27 апреля 2010

Версия, которая делает конфигурацию частью цели по умолчанию "all".

-include config.mk

all: config.mk and other targets

config.mk:
        perl make-config.pl >config.mk
...