请参阅Makefile中的shell脚本输出

eri*_*ich 3 makefile gnu-make

如何在Makefile中构建目标之前执行shell脚本,并在运行时查看输出?

我有一个调用的脚本prepare.sh生成一堆.pyx文件..pyx文件是我的构建过程涉及make的起点.它来自.pyx - > .c - > .o - > .so

我不喜欢在make之前单独运行prepare.sh.我想让它为我运行它.

我让它工作,但我没有看到命令的输出.我想看看它.这就是我现在拥有的:

PATH := ${PYTHONHOME}/bin:${PATH}

NOTHING:=$(shell ./prepare.sh)

PYXS?=$(wildcard merged/*.pyx)
SOURCES=$(PYXS:.pyx=.c)
OBJECTS=$(SOURCES:.c=.o)
SOBJECTS=$(OBJECTS:.o=.so)
Run Code Online (Sandbox Code Playgroud)

Eld*_*mov 5

将脚本的输出重定向到stderr.在这种情况下,您还可以摆脱虚拟NOTHING变量:

$(shell ./prepare.sh >&2)
Run Code Online (Sandbox Code Playgroud)

UPD.

另一种选择是在一个配方中执行脚本,该配方在其他任何事件之前运行:

.PHONY : prepare
prepare :
    ./prepare.sh

-include prepare
Run Code Online (Sandbox Code Playgroud)

另请参阅:原始Beta的答案与此hack,GNU Make手册条目解释它是如何工作的.