用cc編譯c程序

只要輸入
% cc foobar.c

  就會把 foobar.c 通過以上的步驟編譯出來。如果你有 多個文件要編譯,只要輸入

% cc foo.c bar.c

  注意,語法檢查就是──純粹的檢查語法。而不會檢測你可能犯的任何邏輯 錯誤。比如無限循環,或者是你想用一元排序卻使用了冒泡排序。

  cc 有很多選項,在幫助手冊中都可以找到。這裏列出了一 些最重要的選項,並且有例子。

-o filename

輸出的文件名。如果你不使用這個選項,cc爲產生 出一個叫 a.out 的執行文件。

% cc foobar.c
可執行文件是 a.out
% cc -o foobar foobar.c 可執行文件是 foobar

-c

僅僅編譯文件,不會連接。如果你只想檢查你寫的測試程序的語法的話, 這個選項非常有用。或者你會使用 Makefile

% cc -c foobar.c

這會產生一個 目標文件 (不可執行) 叫做 foobar.o。這個文件可以和其他的目標文件連接在一起 構成一個可執行文件。

-g

產生一個可調試的可執行文件。編譯器會在可執行文件中植入一些信息, 這些信息能夠把源文件中的行數和被調用的函數聯繫起來。在你一步一步調試程 序的時候,調試器能夠使用這些信息來顯示源代碼。這是 非常 有用的;缺點就是被植入的信息讓程序變得更大。通常情況下,開 發一個程序的時候我們經常使用 -g,但是我們在編譯一個 “release 版本” 的程序的時候,如果程序工作得讓人滿意了,我 們就不使用 -g 編譯。

% cc -g foobar.c

這會產生一個可調試版本的程序。

-O

產生一個優化版本的可執行文件。編譯器會使用一些聰明的技巧產生出比 普通編譯產生的文件執行更快的可執行文件。可以在 -O 加 上數字來使用更高級的優化。但是這樣做經常會暴露出編譯器的優化器中的一些 錯誤。例如,2.1.0 版本的 FreeBSD 中的 cc 在某些情況 下使用了 -O2 的話,會產生出錯誤的代碼。

優化通常只在編譯一個 release 版本的時候才被打開。

% cc -O -o foobar foobar.c

這會產生一個優化版本的 foobar

  下面的三個參數會迫使 cc 檢查你的代碼是否符合一些國 際標準,經常被我們叫做 ANSI 標準,雖然嚴格的來說它是一個 ISO 標準。

-Wall

打開所有 cc 的作者認爲值得注意的警告。不要只 看這個選項的名字,它並沒有打開所有 cc 能夠注意到的 所有警告。

-ansi

關閉大多數,但並不是所有,cc 提供的非 ANSI C 特性。不要只看選項的名字,它並不嚴格保 證你的代碼會兼容標準。

-pedantic

關閉 所有 cc 的非 ANSI C 特性。

  沒有這些選項,cc 能允許你按照標準使用一些非標準的擴 展。有一些擴展非常有用,但不能與其他編譯器兼容──實際上,這個標準的主要 目的之一就是允許我們寫出可以在任何系統上的由任何編譯器編譯的代碼。這就叫做 可移植代碼

  通常來說,你應該讓你的代碼儘可能的可以移植。否則你就不得不完全重寫你的 代碼以便能夠在其他地方運行之──而且誰知道幾年後你是否還會用它?

% cc -Wall -ansi -pedantic -o foobar foobar.c

  這會在檢查 foobar.c對標準的兼容性以後產生一個 foobar 可執行文件。

-llibrary

在連接的時候指定一個函數庫。

最常見的情況就是當你編譯一個使用了一些 C 中的數學函數的時候。不 像大多數其他的平臺,這些函數都不在 C 的標準庫裏面。你必須告訴編譯器加 上這些庫。

這個規則就是,如果庫的名字叫做 libsomething.a,你就必 須給 cc 這樣的選項 -lsomething。例如,數學庫 叫做 libm.a,因此你給 cc 的選 項就是 -lm。一般情況下,我們要把這個選項放到命令行的 最後。

% cc -o foobar foobar.c -lm

這個會把數學函數庫連接到 foobar 裏面。

 
發佈了3 篇原創文章 · 獲贊 0 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章