我正在创建一个Makefile,我希望它成为不同体系结构,操作系统,库等的单个文件。为此,我有一个特定于构建的XML文件,它定义了每个体系结构的不同配置选项。配置文件由Perl读取(可以是任何语言),Perl输出返回类似:
var1 := var1_value
var2 := var2_value
var3 := var3_value
我要做的是在我的Makefile中定义这些变量。从makefile我调用我的readconfig脚本,它提供了正确的输出,但我无法将这些变量作为我的Makefile的一部分。我已尝试使用eval
和value
,但没有一个有效(虽然这可能是我不知道如何使用它们的问题。总的来说,我想要做的是某些事情像:
read_config:
$(eval (perl '-require "readConfig.pl"'))
@echo $(var1)
可以假设我只使用GNU Make行为。我无法改变的事情:
答案 0 :(得分:5)
我认为您正在寻找的指令是“包含”:
include config.mk
...rest of makefile...
您的脚本生成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
您首先运行make config
(只有一个空的或几乎为空的dummy.mk
文件)。然后它将运行make。如果你不试试这个更简单;除all
以外的其他目标变得棘手,等等。有方法,但它们越来越扭曲。
答案 1 :(得分:3)
不需要将config.mk作为显式目标;如果你加入它,Make会做(如有必要):
-include config.mk
all: real_targets
config.mk: xml_file
perl make-config.pl > $@
答案 2 :(得分:1)
使配置成为默认“全部”目标的一部分的版本。
-include config.mk
all: config.mk and other targets
config.mk:
perl make-config.pl >config.mk