如何编译名称以“-”(连字符 a.k.a. 破折号或减号)开头的文件?

How do I compile a file whose name begins with “-” (hyphen a.k.a. dash or minus)?

我有一个名为 -.o 的文件,它是用以下方法创建的:

echo "int main(){}" | cc -xc -c -

如何link将此文件转换为二进制文件?

命令同:

echo "int main(){}" | cc -xc -c - -o-.o

其中cc是默认编译器(用gcc 4.8.4clang 800.0.42.1测试过),-xc认为输入是用C语言写的,-c生成目标文件,- 将 stdin 作为输入文件,-o-.o 指定输出文件的名称。

所有这些命令都失败了:

cc -.o
cc -- -.o
cc "-.o"
cc \-.o
cc \-.o
cc "\-.o"

有这样的错误:

cc: error: unrecognized command line option ‘--’
cc: error: unrecognized command line option ‘-.o’
cc: error: \-.o: No such file or directory

显然我可以重命名文件,但这不是重点。我想知道为什么 -- 没有像 ls, cp, mv, ...

那样实现

怎么样:

cc ./-.o

(来自 @aschepler 的评论)