【问题标题】:Cygwin make error : *** target pattern contains no `%'Cygwin 出错:*** 目标模式不包含 `%'
【发布时间】:2010-10-10 17:35:39
【问题描述】:

我在(重新)构建时遇到此错误,使用 cygwin make.exe 版本:3.81。

Error : *** target pattern contains no `%'.

【问题讨论】:

    标签: cygwin makefile


    【解决方案1】:

    此错误是由于存在":"。因此它不再支持 windows 路径。 需要下载3.80版本,替换\bin目录下的make.exe

    显然它也需要cygintl12.dll

    【讨论】:

    • +1:我从不同的起点遇到了这个错误(尝试在 Ubuntu 上使用 cmake 和 make 3.81 进行编译)。但是您的回答仍然对我有所帮助...我的构建目录的父级名称包含一个“:”。阅读您的答案后,我将其重命名...假设这会导致 make 出现问题...并且它起作用了!
    • 将环境变量路径更改为 unix 兼容路径对我有用。我发现以下链接很有帮助:gnu.org/software/make/manual/html_node/Error-Messages.htmlgnu.org/software/make/manual/html_node/…
    • @Leco - 您能否将您的解决方案添加为单独的答案? (更多细节)
    • @Reno 当然可以。给我几天左右,我会补充的。
    【解决方案2】:
    • 回滚到 3.80 (Geant4)

      • cd /usr/bin
      • mv make.exe make_381.exe
      • wget http://geant4.cern.ch/support/extras/cygwin/make.exe
      • chmod +x make.exe
    • 从 cygwin 安装程序中安装 libintl2 以获得所需的 cygintl-2.dll

    【讨论】:

      【解决方案3】:

      我在尝试在 Linux 或 OSX 上构建项目时遇到了同样的错误,该项目以前是在 Windows 机器上构建的,并且在输出文件夹中存在一些 .o.d 文件。

      一旦我手动删除了 .o.d 文件,问题就解决了。显然,我的 IDE(在本例中为 CodeLite)的“清理”命令并未删除 .o.d 文件。

      【讨论】:

      • 完全救了我。我的代码在 Windows 上运行良好,但在 OSX 上却不行。删除文件后,我的 idk-build clean 命令有效,之后 idk-build 也有效。
      【解决方案4】:

      很可能是因为驱动器号后面有一个冒号。例如考虑

      build : $(NativeHeaders)/*
      

      如果

      NativeHeaders=../../../cpp/generated
      

      那么一切都很好,但是

      NativeHeaders=C:/dev/folder/cpp/generated
      

      导致您得到的错误。

      【讨论】:

        【解决方案5】:

        我收到此错误是因为我的命令开头没有制表符 (\t) 字符。我的 vim 集中有 expandtab,所以它用 4 个空格替换了一个制表符。当我将其关闭并将空格更改为选项卡时,它已修复

        【讨论】:

        • 我在 OSX 的 makefile 中遇到了同样的问题
        【解决方案6】:

        我在使用 cygwin 构建 Android NDK 时遇到了target pattern contains no '%' 错误。

        我发现以下链接很有帮助:

        Errors Generated by Make

        • '缺少目标模式。停下来。”
        • '多个目标模式。停下来。”
        • ‘目标模式不包含‘%’。停下来。”
        • '混合隐式和静态模式规则。停下来。”

        这些是为格式错误的静态模式规则生成的。第一个意味着规则的目标部分没有模式;第二种意味着目标部分中有多个模式;第三个表示目标不包含模式字符(%);第四个意味着静态模式规则的所有三个部分都包含模式字符(%)——只有前两个部分应该。如果您看到这些错误并且您没有尝试创建静态模式规则,请检查您的目标和先决条件列表中的任何变量的值,以确保它们不包含冒号。Syntax of Static Pattern Rules

        因此,我的解决方案包括将系统变量从 Windows 格式更改为 Unix 格式,如下所示:

        • 我使用/cygdrive/c/Android/android-ndk-r10c 代替C:\Android\android-ndk-r10c 作为NDK 路径。

        同样,我将 NDK 项目路径更改为/cygdrive/c/Android/project/src/main/jni

        【讨论】:

        • 所以你没有弄清楚如何修复 make 本身使用的路径?当 make 构建文件列表时也会出现此问题,并且似乎文件列表未固定为可在目标中使用。
        【解决方案7】:

        就我而言,当我遇到此错误时,我正在使用 Cygwin 下的 CMake。原来是 Windows 版本的 CMake 被执行了。随后,在 make 文件中使用了 Windows 路径。我通过安装程序安装了 Cygwin 的 CMake 版本并让它工作。

        【讨论】:

          【解决方案8】:

          当构建目录包含“:”时,我在 Linux 上遇到了这个问题,这是由于执行 mercurial checkout 创建了一个名为“server:port”的目录而导致的。

          【讨论】:

            【解决方案9】:

            我必须在我的 make 文件中更改以下内容以与 Make_381 兼容:
            之前:
            ARDUINO_BASE_DIR = C:\programs/arduino

            现在:
            ARDUINO_BASE_DIR = \\programs/arduino

            【讨论】:

              【解决方案10】:

              如果您在 Windows 下运行 Eclipse C/C++ 并从 Cygwin 引用文件,请尝试此操作,确保 c:/cygwin/bin 或 c:/cygwin64/bin 位于 Windows 路径环境中您首选的编译器工具之后。

              示例: 路径 = ;C:\yagarto\bin;C:\yagarto-tools\bin;C:\cygwin64\bin;

              修改完成后,退出 Eclipse 并重启生效(直接重启 Eclipse 不退出并不能解决问题。

              【讨论】:

                【解决方案11】:

                在我的项目中,obj 文件夹可能已损坏,我收到此错误。手动删除 obj 文件夹。然后 ndk-build 完成就好了。

                【讨论】:

                  猜你喜欢
                  • 2014-08-07
                  • 1970-01-01
                  • 2020-05-25
                  • 2016-09-08
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多