代码之家  ›  专栏  ›  技术社区  ›  Graviton

foreach循环在makefile中不工作:“系统找不到指定的文件”

  •  0
  • Graviton  · 技术社区  · 15 年前

    我有以下内容的生成文件:

    NUMBERS = 1 2 3 4
    lib:
        $(foreach var,$(NUMBERS),./a.out $(var);)
    

    这是我运行的命令(与makefile在同一目录中)

    make -f Makefile
    

    但我收到一条错误消息,说“系统找不到指定的文件”。

    遵照…的建议 one of the answers ,我在与makefile相同的目录中创建了以下文件:

    a.out
    1.out
    2.out
    3.out
    4.out
    

    现在错误变成:

    /a.out 1;/a.out 2;/a.out 3; /A.OUT 4;制造(E=-1):错误-1制造: ***[lib]错误-1

    注意:我正在Windows XP平台上运行

    4 回复  |  直到 14 年前
        1
  •  3
  •   Didier Trosset    15 年前

    目的 make 是通过运行命令创建(和更新)依赖于源文件的目标文件。

    这里,问题在于运行的命令。你试图运行(通过make)命令 a.out 但它不存在,或者不是可执行命令。尝试用要运行的实际可执行命令替换makefile中的a.out。

        2
  •  1
  •   sateesh    15 年前

    在我看来,错误是因为文件 A. 找不到也找不到,因为找不到生成文件。

    另外,如果make file的名称是“make file”,那么只调用“make”就足够了(不使用-f选项),因为make在默认情况下按以下顺序查找文件:gnumakefile、make file和make file。

        3
  •  0
  •   Dave    15 年前

    你想做什么?

    在我看来,一个简单的脚本比使用make更适合。

        4
  •  0
  •   bta    14 年前

    在Windows/DOS上,使用 && 而不是 ; 在一行上连接多个命令。您必须手动包含最终命令或尾随命令 && 将引发语法错误。尝试以下方法:

    NUMBERS = 1 2 3 4
    lib:
        $(foreach var,$(NUMBERS),.\a.out $(var) && ) echo.