检查在makefile中创建时./work中是否存在子目录?

检查在makefile中创建时./work中是否存在子目录?,makefile,Makefile,在我的makefile中,我想检查给定文件夹中是否存在子目录。 我现在就是这样做的 setup: mkdir -p ./work DIR=$(shell find ./work -maxdepth 0 -type d -print) check: if [-z $(DIR) ]; then \ echo "null" ; \ else \ echo "present" ; \ fi; 我无法在makefile之外创建./

在我的makefile中,我想检查给定文件夹中是否存在子目录。 我现在就是这样做的

setup:
      mkdir -p ./work

DIR=$(shell find ./work -maxdepth 0 -type d -print)
check:
     if [-z $(DIR) ]; then \
       echo "null" ; \
     else  \
       echo "present" ; \
     fi;
我无法在makefile之外创建./work。所以问题在于,由于./work是在makefile中创建的,因此它会给我一个错误/警告,即在实际执行脚本之前,./work不存在


当在makefile中创建子目录时,是否有方法检查子目录是否存在于./work中

一种可能性是先决条件,它也支持make原则,即只构建/创建目标所依赖的东西。既然你们已经听过这个术语“秩序”,我希望你们从现在开始,用更合适的术语“只存在”来代替它,这个术语完全是非正式的,因为我编造它是为了更容易理解。仅限订单的先决条件写在|管道符号右侧的先决条件列表中,其含义是:此规则的目标取决于此先决条件的存在,而不取决于其时间戳。这正是我们想要从一个需要在目录中放置某些内容的规则中得到的:如果目录存在,那么我们就不关心它的日期,主要是因为在Unix目录中,当在那里创建新文件时,会得到一个新的时间戳,并且我们继续处理其余的目标依赖项。但是,如果该目录不存在,则首先执行其规则,这很可能会创建目录:

.PHONY: all
all: foo 
    @cat subdir/subsubdir/subsubsubdir/foo.txt

subdir/subsubdir/subsubsubdir/foo.txt: | subdir/subsubdir/subsubsubdir
    @echo This is file foo.txt > subdir/subsubdir/subsubsubdir/foo.txt

subdir:
    mkdir subdir

subdir/subsubdir: | subdir
    mkdir subdir/subsubdir

subdir/subsubdir/subsubsubdir: | subdir/subsubdir
    mkdir subdir/subsubdir/subsubsubdir

嗨,弗鲁姆丰德尔,非常感谢。现在我知道了“订单仅限每个必备品”,这非常有用。但是在我的情况下,即使我将“设置”作为“订单仅限每个必备品”,shell命令甚至在“订单仅限”或“必备品”发送“find command找不到。/work”错误之前就执行了,然后它会创建相同的命令。奇怪的是,对我来说,它可以工作。您是真的使用稍后将展开的DIR=赋值,还是使用DIR:=?顺便说一句,您应该将checktarget重命名为work,因为如果目标不在文件系统中,make总是执行此规则。