2017-04-10 80 views
-4
rm *.o | g++ -c test.cpp | g++ test.o main.cpp 

結果:爲什麼這個命令失敗? rm和g ++命令?

rm: cannot remove '*.o': No such file or directory 
g++: error: test.o: No such file or directory 

爲什麼呢?

+2

你確定那些'|'不應該是'&&'嗎? – WhozCraig

+1

可能是真的,但這不是原因,至少對於第一個錯誤消息... – user1934428

回答

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

第一個錯誤消息說,沒有以.o結尾的文件可以刪除。

第二條消息說g ++沒有找到要處理的文件test.o。

雖然對於第一個原因是顯而易見的,我也不會預期在這種情況下,第二消息,除非該編譯器也將輸出編譯錯誤信息:

雖然管的使用,如WhozCraig正確在他的評論中指出,沒有任何意義,據我所知,g ++不會讀取要從stdin編譯的文件,也不會將目標文件寫入stdout。

因此,要麼編譯文件(儘管事實上g ++命令放在管道中),或者您應該收到有關編譯錯誤或有關缺少輸入文件的其他錯誤消息。

對於第一次運行,請用分號替換管道符號,再次運行並張貼完整的輸出。

你也可以使用& &這裏他建議,但我不明白爲什麼,如果沒有的.o文件存在不應該進行編譯一個很好的理由。