如何在 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 中创建目标,如何跳过目标的配方