如何从Perl脚本定义Makefile变量?

Fre*_*ddy 2 xml perl makefile environment-variables

我正在创建一个Makefile,我希望它成为不同体系结构,操作系统,库等的单个文件.为此,我有一个特定于构建的XML文件,它定义了每个体系结构的不同配置选项.配置文件由Perl读取(可以是任何语言),Perl输出返回如下内容:

var1 := var1_value
var2 := var2_value
var3 := var3_value
Run Code Online (Sandbox Code Playgroud)

我想要做的是在我的Makefile中定义这个变量.从makefile我调用我的readconfig脚本,它提供了正确的输出,但我无法将这些变量作为我的Makefile的一部分.我曾尝试使用evalvalue,但他们都没有工作(虽然它可能是我不知道如何使用它们的问题在总体什么,我试图做的是一样的东西:

read_config:
     $(eval (perl '-require "readConfig.pl"'))
     @echo $(var1)
Run Code Online (Sandbox Code Playgroud)

可以假设我只使用GNU Make行为.我无法改变的事情:

  • 配置文件在XML上
  • 使用Perl作为XML解析器

Jon*_*ler 5

我认为您要寻找的指令是"包含":

include config.mk

...rest of makefile...
Run Code Online (Sandbox Code Playgroud)

您的脚本生成该config.mk文件; makefile读取它.如果你需要makefile运行生成器,它会变得更复杂:

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
Run Code Online (Sandbox Code Playgroud)

make config先运行(只有一个空的或几乎是空的dummy.mk文件).然后它将运行make.如果你不试试这个更简单; 其他目标比all变得棘手等等.有方法,但它们越来越扭曲.