Makefile文件 - 如果目录不存在失败 - 跨平台
问题描述:
我正在写一个Makefile安装的一部分,我想检查,如果该项目建成,如果不安装应该失败。为了这个目的,我想检查是否存在特定的目录,如果没有 - 失败,并显示相应的错误(像“请运行使所有第一”)。Makefile文件 - 如果目录不存在失败 - 跨平台
我也希望这个Makefile到在Linux,Windows(MinGW的)和MacOS工作。
任何人都可以帮助我吗?
答
如果您正在使用GNU拨打或版本作出支持order-only prerequisites,有一个自然的解决方案。将这些目录声明为安装目标的仅限订单的前提条件:
install: | $(DIRS)
<install recipe>
$(DIRS):
@echo "please run make all first" && exit 1
答
如果你使用MinGW的牌子,那么答案sholud是相同的所有平台:
dirs-exist:
test -d dir1 || echo Run make install first && exit 2
test -d dir2
在我们使用或运营商如果测试打印失败的消息的第一个目录。然而,即使我们成功打印的消息,我们希望全线失败,所以如果你想在所有情况下,消息我们出口与2 上述逻辑的错误代码可以应用到每一个目录。如果你有很多的目录,类似下面的循环可能会奏效
test_dirs:
for d in dir1 dir2; do if test \! -d $$d; then echo run make install first; exit 2; fi
,如果你需要这种与NMAKE和CMD窗口上的工作,唯一的复杂性会;听起来像这不是一个问题。
答
@ SamHarman的答案是正确的(他更早公布),所以你应该尽快接受他的答案,他修复他的第一个例子。在任何情况下,我想我会张贴此为好,这是同样的事情稍短及略微更混乱的版本... :-)
DIRS=dir1 dir2 dir3
checkdirs:
[[ 1 ${DIRS:%= && -d %} ]] || (echo "uh oh..." && false);
.PHONY: checkdirs
谢谢!如果其中一个目录不存在,如何输出错误消息? – fx23
我认为你需要周围的回声和出口(由于操作precidence)括号... – HardcoreHenry