標籤:

g++ -o hello hello.cpp產生的可執行文件文件類型是什麼?

如何使用.gitingore把生成的可執行文件屏蔽掉?


文件類型是可執行文件。一般是 ELF,無後綴。不過在 POSIX 系統中,文件的類型由內容決定,與文件名無關。所以無法用文件名判斷類型,僅僅用文件名去判斷文件類型的方法在 POSIX 系統中都是不完全可靠的。

如果一定要有個後綴的話,可以理解為預設後綴是 .out ,gcc 在不指定生成的目標文件名情況下會預設生成 .out 後綴。不過在具體的項目中幾乎不會有人對可執行文件使用 .out 的擴展名。

對於可執行文件來說,版本管理一般不成為太大問題,畢竟每個項目的可執行文件的數量一般是有限的,名字一般是固定的,可以使用 .gitignore 單獨指定每個文件。

如果生成的文件比較多而且你無法確定所有的文件名的話。可以考慮單獨創建一個目錄進行構建,例如在代碼目錄下創建一個名叫 build 的目錄。然後所有的生成文件輸出到該目錄,.gitignore 屏蔽這整個目錄即可。


1. 在Linux上,可執行文件確實沒有後綴,所以企圖通過gitignore屏蔽掉可執行文件是不現實的。

2. 編譯的時候可以使用shadow build,把生成的所有文件放在一個build目錄裡面,然後屏蔽掉這個build目錄就行了。


在類Unix系統下編譯出來的是ELF格式二進位文件。

辦法可以生成到指定一個文件夾,ignore這個文件夾。又或者生成的二進位執行文件都指定一個後綴比如.out,在.gitignore里添加*.out


提交之前做一次make clean或者類似的工作


為了簡單起見你可以要求編譯出來的文件名分別是hello.obj和hello.exe,然後就可以在gitignore裡面幹掉了。啊哈哈哈。

譬如說

g++ -o hello.obj -c hello.cpp

g++ -o hello.exe hello.obj


你編譯好以後完全可以順便file一把。


項目產生的目標,無論是IDE產生的還是Makefile裡面寫好的,應該可以指定輸出文件名吧?

比較好的習慣是,將輸出文件、中間文件、源代碼、還有依賴分開文件夾放。到時打包就可以將輸出文件抄走了。ignore裡面將除了源代碼文件夾都加上。

在posix裡面,是否可執行和後綴名無關。


直接寫hello


推薦閱讀:

初學git,commit了多次才push到remote,怎麼刪除不想要的commit歷史,或是刪除之前的commit記錄?
代碼寫得好,但是不會(不願)使用 Git 之類的代碼管理工具能稱得上是優秀程序員嗎?
git clone和 git pull 操作都正常,但是不能push,這是為什麼?
利用Git進行版本控制------RStudio

TAG:Git | CC |