如何在 makefile 中创建目录

Posted

技术标签:

【中文标题】如何在 makefile 中创建目录【英文标题】:How do I create a directory in a makefile 【发布时间】:2009-03-16 23:28:36 【问题描述】:

我正在使用 Visual Studio 2005 nmake,并且我有一个这样的测试 makefile:

sometarget:
    -mkdir c:\testdir

我想始终创建目录,而不必指定“sometarget”。例如,我可以这样做:

!if [if not exist c:\testdir\$(null) mkdir c:\testdir]
!endif

但这需要两行,我真的只想执行“-mkdir c:\testdir”。如果我只是用“-mkdir c:\testdir”替换它,我会从 nmake 收到一个错误 - “致命错误 U1034:语法错误:缺少分隔符”。

我怎样才能始终执行 mkdir,而不用弄乱 !if [] 东西​​?

【问题讨论】:

【参考方案1】:

我认为这会奏效:

 -@ if NOT EXIST "dir" mkdir "dir"

【讨论】:

这在 Windows 7 上对我有用,正是我所需要的。【参考方案2】:

Make 总是想根据目标做事。它不是一个通用的脚本工具。它查看目标并检查它们是否存在。如果目标不存在,它将执行该目标的命令。

执行此操作的通常方法是创建一个永远不会由 make 脚本生成的虚拟目标,因此每次 make 运行时都必须执行相关命令。

或者,您可以将命令添加到批处理文件中,然后调用您的 make 文件。

【讨论】:

【参考方案3】:

我不确定 Windows 中是否有与 nmake 等效的功能,但我设法在 Linux 上不使用目标的情况下创建了一个目录。我使用了make函数“shell”。例如:

# Find where we are
TOPDIR := $(shell pwd)
# Define destination directory
ROOTFS := $(TOPDIR)/rootfs
# Make sure destination directory exists before invoking any tags
$(shell [ -d "$(ROOTFS)" ] || mkdir -p $(ROOTFS))

all:
    @if [ -d "$(ROOTFS)" ]; then echo "Cool!"; else echo "Darn!"; fi

我希望 Windows 也有这样的功能。

【讨论】:

谢谢!这正是我所需要的【参考方案4】:

$(DIRNAME): @[ -d $@ ] || mkdir -p $@

【讨论】:

【参考方案5】:

试试这个:

-mkdir -p c:\testdir

【讨论】:

以上是关于如何在 makefile 中创建目录的主要内容,如果未能解决你的问题,请参考以下文章

如果另一个配方在 Makefile 中创建目标,如何跳过目标的配方

如何创建用于从子目录中的其他 Makefile 编译多个驱动程序的 Makeflow

从 makefile 在 build 目录中创建中间文件

如何使用 automake 安装数据目录树

如何在单个命令中创建目录并授予权限

如何在控制器中创建目录 - laravel