rm *.o | g++ -c test.cpp | g++ test.o main.cpp
结果:
rm: cannot remove '*.o': No such file or directory
g++: error: test.o: No such file or directory
为什么?
答案 0 :(得分:3)
两个问题:(a)您可能没有要删除的.o文件,以及(b)您使用的管道不当。尝试:
rm *.o &> /dev/null ; g++ -c test.cpp && g++ test.o main.cpp
^^^^^^^^^^^^^^ ^^
ignore any error only try to link if
message and compile is successful
continue regardless
答案 1 :(得分:1)
第一条错误消息表明没有以.o结尾的文件可以删除。
第二条消息说g ++没有找到要处理的文件test.o。
虽然第一个的原因很明显,但在这种情况下我不会期望第二条消息,除非编译器也输出编译错误消息:
虽然管道的使用,正如WhozCraig在他的评论中正确指出的那样,没有意义,但据我所知,g ++并没有读取要从stdin编译的文件,也没有编写目标文件到标准输出。
因此,要么编译文件(尽管g ++命令放在管道中),或者您应该收到有关编译错误或缺少输入文件的其他错误消息。
首次运行时,用分号替换管道符号,再次运行并发布您收到的完整输出。
你也可以使用&&在他建议的地方,但是如果不存在.o文件,我没有看到为什么不应该执行编译的充分理由。