mkdir在Makefile和Terminal中的不同行为

时间:2015-04-08 13:28:23

标签: makefile mkdir

我在Linux Ubuntu 14中遇到mkdir命令的问题。我想在同一级别创建多个目录,所以在Makefile中我做过类似的事情。

mkdir -v /opt/dir/{dir1,dir2,dir3}

,其输出类似于

mkdir: created directory '/opt/dir/{dir1,dir2,dir3}'

但是当我直接在终端上运行这个命令时,我得到了预期的结果。

'mkdir: created directory /opt/dir/dir1'
'mkdir: created directory /opt/dir/dir2'
'mkdir: created directory /opt/dir/dir3'

我无法找到问题。

任何建议都会有所帮助。 在此先感谢。

2 个答案:

答案 0 :(得分:1)

在我看来,问题不在于mkdir的工作方式不同,而是你在终端中使用的shell与make运行命令时使用的shell不同。默认情况下make(gnu或其他)使用/ bin / sh。

尝试将SHELL=/bin/bash添加到您的makefile中。

答案 1 :(得分:0)

使用{a,b,c}进行大括号扩展是一种非便携式外壳扩展,/bin/sh使用的make无法理解。您应该按

中的说明拼出目录
mkdir -v /opt/dir/dir1 /opt/dir/dir2 /opt/dir/dir3

或使用

for d in dir1 dir2 dir3; do mkdir -v /opt/dir/$$d; done

这再次说明了便携式shell编程的重要性。 Know what is POSIX shell而不是。