有没有办法使用 shell 脚本的返回值作为 Makefile 中的依赖项?
例如:
生成文件:
proj: getsource.sh
cc src1.c src2.c ...
getsource.sh: checksource.sh
wget http://www.something.com/src1.c
Run Code Online (Sandbox Code Playgroud)
检查源.sh:
#!/bin/sh
# bash pseudo code because I can never remember bash's syntax
if [[ -not -exists src1.c ]]
exit 1
else
exit 0
...
Run Code Online (Sandbox Code Playgroud)
当在没有源的情况下执行时,Makefile 将运行 getsource.sh 目标,然后运行 proj 目标。如果源存在,它只会运行 proj 目标。
AFAIK,Makefile 规则仅取决于本地文件的日期。因此,不幸的是,您必须执行类似 @xbug 所示的操作,并且在更通用的情况下:
file-I-care-about.ext: .some-precondition.dep
run-command > file-I-care-about.ext
.some-precondition.dep:
run-some-logic && touch .some-precondition.dep
Run Code Online (Sandbox Code Playgroud)
例如,我想确保我安装了一个需要安装的实用程序,但这完全适用于您想要断言的任何条件:
# Generate README from my source file
README.md: src1.cc .extractor-installed.dep
mdextract src1.cc > $@
# Install doc extractor if it's not already installed
.extractor-installed.dep:
which mdextract && touch $@ || npm install -g mdextract && touch $@
Run Code Online (Sandbox Code Playgroud)
which mdextract是我的“验证逻辑”,如果它通过,我会更新依赖项,但否则我会运行昂贵的命令,然后更新依赖项。
| 归档时间: |
|
| 查看次数: |
721 次 |
| 最近记录: |