shell touch命令在Makefile中不起作用

shell touch命令在Makefile中不起作用,makefile,gnu-make,Makefile,Gnu Make,在Makefile内部: generate: touch file{1..10} 使用make 我得到一个文件名file{1..10},而不是10个不同的文件。 touch命令在外壳上正常工作 为什么?Make按照名为shell的变量中的指定调用shell。*nix系统的默认值是SHELL=/bin/sh 设置SHELL=/bin/bash(或其他)使其工作 注意:与其他make的变量不同,SHELL的值从未从环境中导入(如果在POSIX操作系统下运行;这对于本机Windows版本不是

在Makefile内部:

generate:
    touch file{1..10}
使用
make

我得到一个文件名file{1..10},而不是10个不同的文件。
touch
命令在外壳上正常工作


为什么?

Make按照名为
shell
的变量中的指定调用shell。*nix系统的默认值是
SHELL=/bin/sh

设置
SHELL=/bin/bash
(或其他)使其工作


注意:与其他make的变量不同,
SHELL
的值从未从环境中导入(如果在POSIX操作系统下运行;这对于本机Windows版本不是真的)。

感谢它现在可以工作了,我以为make正在监视已经是/bin/bash的环境变量。我在makefile中添加了您所说的一行,现在它可以工作了:)@make尽可能从环境中导入变量。但是
SHELL
是一个例外——它从来都不是从环境中设置的。我很确定没有版本的make可以导入用户的SHELL值。这将是一个灾难:考虑是否有人使用<代码> CSH 或<代码> FISH <代码>或其他一些非常不同的shell:MaX文件将完全不能工作。我忘了,也许Windows有特殊的规则。@MadScientist
也许Windows有特殊的规则
是的,任何“鱼”都没有“cmd”那么邪恶,所以在Windows下,gmake可能会在“不寻常的地方”搜索shell,比如shell或PATH环境变量。我认为,应该加以描述。但Cygwin和MSYS都不这样做,只有本机Windows构建。