c語言查缺補漏-2.md
C語言查缺補漏(二)
忽略點二:使用IED而忽略最基礎的命令
大一開始使用CodeBlocks來寫C語言程式,後來用VS,再後來Xcode。最近才發現一個問題,自己竟然不會使用終端編譯執行.C檔案。這種最基本的東西,很遺憾在這兩年學習中被我無情的忽略了。
第一步: cd到.c檔案所在目錄
$ cd 路徑地址
第二步:編譯原始檔並生成可執行程式碼檔案,舉個例子
$ gcc main.c //編譯main.c檔案,生成可執行檔案(預設名a.out)
$ gcc -o program main.c //main.c為原始檔,program為生成的可執行檔案
關於預設生成的a.out,它是臨時性的可執行檔案。如果同一路徑下多個c語言原始檔採用了預設編譯,a.out中輸出的內容為最後一個C語言原始檔所執行的結果(也就是說之前原始檔編譯生成的a.out被覆蓋掉了)
這時候就體現了 gcc -o 的-o的作用 它可以指定生成輸出檔案
以下到第三步之前是附加內容(除此之外
選項 -E 可以將test.c預處理輸出(其中-E的功能是預處理test.c並輸出到終端,不生成檔案)
$ gcc -E test.c -o test.i
$ gcc -E test.c > test.i //其中>為重定向符
選項 -S 可以將test.c彙編成test.s檔案(也就是從原始檔->彙編程式碼)
$ gcc -S -o test.s test.c $ gcc -S test.c (簡寫 效果一樣) $ gcc -S test.c > test.s
選項 -c 可將test.c編譯輸出到test.o檔案 (編譯過程中的中間檔案)
$ gcc -c -o test.o test.c
$ gcc -c test.c (簡寫 效果一樣)
其中: .i檔案是進行預編譯之後生成的檔案,一般是引用標頭檔案的內容和一些巨集定義
.s檔案是組合語言原始檔,一般是 .c 檔案經過彙編器處理後的輸出
.o檔案程式編譯中的目標檔案(注意是編譯中,不是最終!)裡面包含了各個函式的入口標記與描述,程式執行還需要連結(link).連結就是把多個.o檔案鏈成一個可執行檔案。)
第三步:執行可執行檔案
$ ./program
以上就是用命令列實現C語言的編譯執行的全過程
對於專案(多檔案),我們無法單個的編譯執行,這時候我們應該怎麼辦呢?
第一步: 分別用-c命令編譯每個.c檔案(包括main函式檔案)
$ gcc -c xxx.c
我們會得到每個xxx.c檔案的目標檔案xxx.o
第二步:將主程式的目的碼與他們連結在一起
例如下面命令是將專案的所有目的碼xxx.o與main.o連結在一起,並輸出了可執行檔案program
$ gcc main.o xxx.o xxx.o xxx.o -o program
這樣一個專案多檔案程式碼就可以執行啦!
如果有寫的不對或者不全面的地方 請指正! 謝謝~