我如何 运行 两个 makefile 目标,以便第二个使用第一个的变量?
How can I run two makefile targets such that the second uses the first's variables?
我正在编写一个包含多个体系结构和构建类型目标的 makefile。当我调用 make 时,我希望能够将两个目标传递给它,例如:
make x86 debug
其中体系结构目标设置构建目标要使用的变量。架构目标可能如下所示:
.PHONY: x86
x86: NAME_PREFIX = x86_64_Linux
x86: TARGET_TRIPLE = x86_64-pc-linux-elf
x86: CC = gcc
x86: CFLAGS += -fomit-frame-pointer
第一个问题:如果我 运行 这两个目标,make 会跳过第一个目标,因为它只设置变量。
$ make x86 debug
make: Nothing to be done for `x86'.
第二个问题:即使它将 运行 第一个目标,我的理解是当 make 开始 运行 无论如何都不会保留第二个目标时的值。
目前,我正在使用设置变量的目标,并将构建类型目标作为先决条件添加到目标主体的末尾,但我最终需要为体系结构和构建类型的每种组合添加一个目标。
.PHONY: x86_debug
x86_debug: NAME_PREFIX = x86_64_Linux
x86_debug: TARGET_TRIPLE = x86_64-pc-linux-elf
x86_debug: CC = gcc
x86_debug: CFLAGS += -fomit-frame-pointer
x86_debug: debug
你的第二种方法更好。但是如果您使用一致的命名方案并使用通配符目标,则不需要每个组合都有一个目标:
.PHONY: x86_% arm_% # etc
.PHONY: %_debug %_optimised # etc
x86_%: NAME_PREFIX = x86_64_Linux
x86_%: TARGET_TRIPLE = x86_64-pc-linux-elf
x86_%: CC = gcc
x86_%: CFLAGS += -fomit-frame-pointer
arm_%: NAME_PREFIX = ARM_LINUX
arm_%: TARGET_TRIPLE = arm-linux-eabi
arm_%: CC = arm-linux-gcc
%_debug: CFLAGS += -g
%_optimised: CFLAGS += -O3
我正在编写一个包含多个体系结构和构建类型目标的 makefile。当我调用 make 时,我希望能够将两个目标传递给它,例如:
make x86 debug
其中体系结构目标设置构建目标要使用的变量。架构目标可能如下所示:
.PHONY: x86
x86: NAME_PREFIX = x86_64_Linux
x86: TARGET_TRIPLE = x86_64-pc-linux-elf
x86: CC = gcc
x86: CFLAGS += -fomit-frame-pointer
第一个问题:如果我 运行 这两个目标,make 会跳过第一个目标,因为它只设置变量。
$ make x86 debug
make: Nothing to be done for `x86'.
第二个问题:即使它将 运行 第一个目标,我的理解是当 make 开始 运行 无论如何都不会保留第二个目标时的值。
目前,我正在使用设置变量的目标,并将构建类型目标作为先决条件添加到目标主体的末尾,但我最终需要为体系结构和构建类型的每种组合添加一个目标。
.PHONY: x86_debug
x86_debug: NAME_PREFIX = x86_64_Linux
x86_debug: TARGET_TRIPLE = x86_64-pc-linux-elf
x86_debug: CC = gcc
x86_debug: CFLAGS += -fomit-frame-pointer
x86_debug: debug
你的第二种方法更好。但是如果您使用一致的命名方案并使用通配符目标,则不需要每个组合都有一个目标:
.PHONY: x86_% arm_% # etc
.PHONY: %_debug %_optimised # etc
x86_%: NAME_PREFIX = x86_64_Linux
x86_%: TARGET_TRIPLE = x86_64-pc-linux-elf
x86_%: CC = gcc
x86_%: CFLAGS += -fomit-frame-pointer
arm_%: NAME_PREFIX = ARM_LINUX
arm_%: TARGET_TRIPLE = arm-linux-eabi
arm_%: CC = arm-linux-gcc
%_debug: CFLAGS += -g
%_optimised: CFLAGS += -O3