我有以下内容的Makefile:
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; make(e = -1):错误-1 make: *** [lib]错误-1
注意:我在Windows XP平台上运行
答案 0 :(得分:3)
make
的目的是通过运行命令来创建(和更新)依赖于源文件的目标文件。
这里,问题在于运行的命令。您正在尝试运行(通过make)命令a.out
但它不存在,或者不是可执行命令。尝试通过您想要运行的实际可执行命令替换makefile中的a.out。
答案 1 :(得分:1)
在我看来,错误的发生是因为无法找到文件 a.out 而不是因为找不到makefile。
此外,如果makefile的名称是“Makefile”,只需调用“make”即可(不使用-f选项),因为默认情况下make会按名称查找文件:GNUmakefile,makefile和Makefile。
答案 2 :(得分:1)
在Windows / DOS上,使用&&
代替;
在一行上加入多个命令。您必须手动包含最终命令,否则尾随&&
将引发语法错误。尝试类似:
NUMBERS = 1 2 3 4
lib:
$(foreach var,$(NUMBERS),.\a.out $(var) && ) echo.
答案 3 :(得分:0)
你想做什么?
在我看来,普通脚本更适合而不是使用make。
答案 4 :(得分:0)
我发现 the answer by bta 最有用,但它在 Windows 和 Linux 上对我都不起作用,所以我找到了一种方法来删除最后的 &&
,从而避免了不需要 -适用于两个平台的 op 命令:
NUMBERS = 1 2 3 4
lib:
$(filter-out &&EOL, $(foreach var,$(NUMBERS), .\a.out $(var) &&)EOL)
当然要小心匹配 &&EOL
的数组中的元素,但就我而言,这不是问题。