Foreach循环在Makefile中不起作用:";系统找不到指定的文件";

Foreach循环在Makefile中不起作用:";系统找不到指定的文件";,makefile,Makefile,我有一个包含以下内容的Makefile: NUMBERS = 1 2 3 4 lib: $(foreach var,$(NUMBERS),./a.out $(var);) 这是我运行的命令(与Makefile在同一目录中) 但是我收到一条错误消息,说“系统找不到指定的文件” 根据的建议,我在与Makefile相同的目录中创建了以下文件: a.out 1.out 2.out 3.out 4.out 现在错误变成: /a.out 1/a、 出局2/a、 3人; ./a.out 4;mak

我有一个包含以下内容的Makefile:

NUMBERS = 1 2 3 4
lib:
    $(foreach var,$(NUMBERS),./a.out $(var);)
这是我运行的命令(与Makefile在同一目录中)

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

根据的建议,我在与Makefile相同的目录中创建了以下文件:

a.out
1.out
2.out
3.out
4.out
现在错误变成:

/a.out 1/a、 出局2/a、 3人; ./a.out 4;make(e=-1):错误-1 make: ***[lib]错误-1


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

在我看来,出现错误的原因是找不到文件a.out,而不是找不到makefile


另外,如果makefile的名称是“makefile”,那么只调用“make”就足够了(不使用-f选项),因为默认情况下make将按名称查找文件:GNUmakefile、makefile和makefile。在我看来,出现错误的原因似乎是找不到文件a.out,而不是找不到makefile


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

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


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

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


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

您想做什么


在我看来,普通脚本比使用make更合适。

你到底想做什么


在我看来,普通脚本比使用make更合适。

在Windows/DOS上,使用
&&
而不是
在一行上连接多个命令。您必须手动包含最终命令,否则尾部的
&&
将抛出语法错误。尝试以下方法:

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

在Windows/DOS上,使用
&
而不是
在一行上连接多个命令。您必须手动包含最终命令,否则尾部的
&&
将抛出语法错误。尝试以下方法:

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

我已在与makefile相同的文件夹中创建了
a.out
,但仍然存在问题。请注意,
a.out
必须是可执行文件。我已在与makefile相同的文件夹中创建了
a.out
,但仍然存在问题。请注意,
a.out
必须是可执行文件。您可以尝试运行
/a.out 1/a、 出局2/a、 出局3/a、 出4名make
。也许它会显示更多有用的错误信息。您可以尝试运行
/a.out 1/a、 出局2/a、 出局3/a、 出4名make
。也许它会显示更多有用的错误信息。这是我想做的一个缩尺示例。这是我想做的一个缩尺示例。