我正在尝试通过 Makefile 将多个文件从一个目录复制到另一个目录。
但这不起作用......
SHELL=/bin/bash
copy:
@cp /dir1/dir2/{file1,file2} /dir3/
输出:
cp: /dir1/dir2/{file1,file2}: No such file or directory
*** Error code 1
Stop.
make: stopped in /dir1/dir2
一次指定一个文件是可行的
SHELL=/bin/bash
copy:
@cp /dir1/dir2/file1 /dir3/
@cp /dir1/dir2/file2 /dir3/
该问题特定于 freebsd make ( /usr/bin/make
),并且相同的 Makefile 可在 freebsd 上与 gmake 一起使用 ( /usr/local/bin/gmake
)。
那么,我可以假设 freebsd make 不理解路径中的括号语法吗?我可以根据 freebsd make 语法进行任何调整来更正 Makefile 吗?
扩展这些括号的是 shell,而不是 make。Make 只是将配方命令传递给 shell。在 FreeBSD make 中,变量
SHELL
不会改变 shell。因此,我猜想 FreeBSD make 不符合 POSIX。在 FreeBSD make 中,您必须使用
.SHELL
特殊目标。请参阅:https://man.freebsd.org/cgi/man.cgi?make(1)由于
.SHELL
对 GNU Make 来说并不重要,您可以将其添加到您的 makefile 中,GNU Make 将会忽略它。