目的是在linux中創建可執行的c語言程序的步驟 和gcc,make和git的簡單運用
建立可執行程序的步驟:
-1:預處理:
--:頭文件展開;--去掉注釋;--宏替換;--條件編譯
-2:編譯
--:將預處理之后的c語言替換為匯編語言帶阿米
--:語法分析,語義分析,代碼生成
--:檢查語法正確性并且優化代碼
-3:匯編:
--:將匯編代碼轉化為機器碼
--:生成二進制文件,包含機器碼和輔助信息
-4:鏈接
--:將多個目標文件和庫文件合并為一個可執行文件
--:解析符號表,處理外部引用
使用gcc編譯c語言程序:
GNU C編譯器,是linux通用c語言編譯器
語法格式: gcc [-選項] 文件
沒有選項直接生成可執行文件
常用的選項:
E 只是預處理源文件,不編譯
S 編譯到匯編,生產匯編代碼文件
c 編譯到目標文件階段,但是不鏈接(二進制文件,可以使用 objdump反匯編查看匯編代碼)
o 根據編譯階段指定的輸出到文件名
項目編譯工具:make
為了解決:源代碼關系維護苦難(把代碼維護命令和編譯命令卸載makefile中,利用make工具去解析文件自動執行相關的命令),減少重復編譯時間(只對改動后的文件重新編譯,重新鏈接后,可以快速看到效果)
makefile文件:這個是mkae依賴文件
特殊文本文件,包含指令和信息,詳細描述了項目結果,文件間關系,編譯參數設置,等待makefile編寫完成,就可以實現大型項目的編譯鏈接,清理工作
make的原理:解析makefile文件,根據目標及其依賴關系,構建依賴圖,并自動執行相應的構建命令
makefile文件有若干規則,目標,依賴和命令
目標是:要產生的文件名稱和動作名稱
依賴文件是:用于產生目標文件的輸入文件
命令是:make執行的動作,多個命令時一個占一行
make的語法規則:
make [-f 文件] [目標]
運行命令的時候,默認找:GNUmakefile /makefile / Makefile /當然也可以 -f指定
目標,如果沒有指定目標就會構建第一個目標然后退出,如果有多個,就會按順序去構建目標及其依賴關系
實例:編譯軟件 hello
在makefile中,如下定義
hello: hello.c
gcc -o hello hello.c
說明了hello 依賴:hello.c,hello通過gcc -o hello hello.c得來
實例2:
要編譯cal軟件,那么我們的makefile如下
cal 依賴與cal.o,mul.o,div.o
通過命令 gcc cal.o mul.o div.o -o cal 生成
下面的解釋同上
最后的clean目標是偽目標,不依賴與任何文件
rm *.o是.o后綴文件
第一次的make會全部編譯一次
但是如果第二次進行make,因為沒有改變就不會有任何提示信息
如果我們通過touch,修改了創建時間,那么就會只編譯修改部分
使用 make clean就可以刪除所有的.o文件
Git
用于高效的處理各種規模的項目版本管理任務,開發者通過git命令來執行項目版本管理和各項操作
1,工作目錄,在電腦中的目錄,用于項目開發,進行文件編輯,添加和刪除
2,暫存區,在本地倉庫和工作目錄之間的,允許用戶在提交前進行組織,檢查
3,本地倉庫負責存儲用戶的所有提交,分支,標簽,版本控制的核心,使得用戶可以回顧歷史版本,修改,創建,切換分支,或者添加標簽
4,遠程倉庫,托管在平臺or服務器上面的軟件庫,包含了源代碼,歷史記錄,分支信息,配置文件,可以推送本地倉庫修改,拉去倉庫最新版本等
常見命令
git clone [遠程倉庫的鏈接]
git add [文件/目錄]//將文件加入到暫存區
git commit -m "說明信息"//將暫存區的內容提交
git push [遠程倉庫] [本地分支]//把本地分支提交到遠程目錄
git pull [遠程倉庫] [分支] //拉取遠程倉庫的分支
git branch //列出所有本地分支
git branch name //創建一個分支
git checkuot 分支名 //切換到對應的分支
git branch -d [分支] //刪除分支
git status //倉庫的狀態
git log //git的提交記錄
git config //查看和修改git配置
當然更多的你可以去Learn Git Branching學習更多