gnumake的奇怪重定向问题
|
我有一个生成文件的系统,该文件在Mac OS X下可以正常运行。在Linux下运行该文件时,会遇到一个奇怪的问题。我设法将我的makefile简化为一个非常简单的示例:
编译:
gcc -o prog * .c&>编译__
chm:
chmod u = rwx,g = rwx,o =编
both0:
gcc -o prog * .c&> compile__; \\
chmod u = rwx,g = rwx,o =编
both1:
gcc -o prog * .c; \\
chmod u = rwx,g = rwx,o =编
想法是编译文件,然后更改其权限。如果我执行命令序列:
进行编译
使chm
一切正常。但是,如果我执行:
两者都做
我收到消息:
chmod:无法访问`prog \':没有这样的文件或目录
并且权限不会更改。另一方面,如果我执行:
使两者都
权限已正确更改。唯一的不同是在both0下的重定向\“&> compile __ \”,我为both1都删除了。
有任何想法吗?
没有找到相关结果
已邀请:
2 个回复
剿畦缄饥小
不是可移植的重定向。在bash中,它同时重定向标准错误和标准输出,我认为这是您的意图。其他外壳可能会对它做不同的事情。特别是,破折号使命令((1)成为背景,并重定向标准输出(
)。在编译完成并创建before4 and之前执行
。可以用port5ѭ进行标准错误和标准输出的重定向。 (为什么它在Mac上不能工作?可能是一个不同的shell,它对ѭ6进行了不同的解释,可能是编译器更早地打开了文件,可能是竞争条件稍有不同。)
凡夕
使用的外壳。手册第5.3.1节提供了有关此信息。例如,以下
在Makefile中,似乎可以在Ubuntu / Debian上使用Gnu Make 3.8.1选择bash作为外壳。 其他问题是所有内置Shell的行为上的差异,例如
,
,
等。在基于Debian的系统上以
运行时,这些内置的神秘选项可能会神秘地失败。