【问题标题】:How do I create a directory in a makefile如何在 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 [] 东西​​?

【问题讨论】:

    标签: visual-c++ makefile nmake


    【解决方案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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-05-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-10-10
          • 2010-10-10
          • 2011-07-08
          • 1970-01-01
          相关资源
          最近更新 更多