長途漫漫,慢慢走來:Linux的第二課

來源:互聯網
上載者:User

【datatime】2006-08-14
【title】gcc的使用
gcc格式
gcc [-c 編譯,不串連] [-S] [-E] [-std] [-g 加入調試資訊] [-pg加入剖析資訊] [-Olevel]
    [-W 警告設定] [-pedantic 發出所有標準C列出的警告] [-Idir 添加包含目錄到搜尋列表中] [-Ldir添加庫目錄到搜尋列表中]
    [-D] [-U] [-f] [-m] [-o 編譯到可執行檔,並作一些最佳化]...
說明:
    -w       關閉所有警告設定
    -Wall    允許發出所有警告
    -werror  把所有警告轉化為錯誤
    -v       顯示編譯過程中的每一步用到的命令
    -ggdb    在可執行程式中包含大量的調試資訊
    -MM      輸出一個make相容的相關列表
    -O       最佳化編譯過的代碼
    -fsyntax-only  只檢查文法,其他都不做
    -save-temps 儲存編譯過程中產生的中間檔案
    -Q       編譯器輸出編譯每個函數時所花的時間資訊
gcc的最佳化選項:
    -O等價於-O1,並且包含線程直接跳轉和遲延堆棧這兩種最佳化。
    -O2包含了-O1的最佳化選項,並增加了一些額外的調整,如包含對處理器指令調度的調整。
    -O3也類似
gcc的調試選項:
    -g == -g2,該層級包括擴充符號表、行號、以及局部變數或外部變數。-g3除了包含-g2的資訊外,還包含了原始碼中定義的宏.
gcc的擴充:
    資料類型,如 long long來表示64位的儲存單元。
    內嵌函式,inline關鍵字只是一個建議而不是指令,內聯的最佳化由編譯器分析完成。
    函數和變數的屬性,關鍵字attribute,在函數或是變數的尾部加上_attribute_((屬性名稱))來完成。
    void FunctionName() _attribute_((noreturn)); /* 不傳回值 */
    int int_var _attribute((aligned 16)) = 0; /* 對齊到16位 */
    注釋,//呵呵,這個在標準c中沒有,標準c中的注釋是/* */。
    建構函式名稱,使用_FUNCTION_就可以輸出當前調用函數的名稱。如
    void main(void)
    {
         printf("%s", _FUNCTION_);
    }
【title】make的使用
    Makefile規則格式如下:
    target : dependency [dependency [...]]
             command
             command
             [...]
    target為目標體,即make要建立的檔案;dependency依賴體,必須有依賴檔案,即標頭檔和目標檔案或源檔案;
    警告:
    每個命令的第一字元必須為定位字元,不能用8個空格來代替。
    Example:
    1.建立一個Makefile檔案,用文本編輯
    2.輸入下列代碼
    helloworld : main.o function.o function.h
 gcc main.o function.o -o helloworld
    main.o :  main.c function.h
 gcc -c main.c
    function.o : function.c function.h
 gcc -c function.c
    all : helloworld
    clean : /* 只是個動作 ,並不真的刪除.o檔案 */
 rm *.o
    3.在目錄中輸入make就可以得到編譯的檔案了。

【error | make: **No targets specified and on makefile founcd. stop | 缺少Makefile檔案名稱的檔案】
【error | make: Circular function.o <- function.o dependency dropped | 依賴檔案錯誤】
【error | on newline at end of file | 需要在每一個源檔案的最後敲入一個斷行符號符】

    在加入.PHONY後,就直接執行Makefile檔案中的命令。
    make讀取環境變數,如果在Makefile檔案中有同名的變數,則這個變數取代環境變數。
    make命令的命令列參數:
        -f file    指定的makefile檔案名稱
        -n         列印將要執行的命令
        -Idirname  指定被包含的makefile所在的目錄
        -s         在執行時不列印命令名
        -w         如果在make執行時改變目錄, 列印目前的目錄
        -Wfile     如果檔案已修改,則使用-n來顯示make將要執行的命令
        -r         禁用所有的make的內建規則
        -d         列印調試資訊
        -i         忽略返回的非零錯誤
        -k         直到目標編譯終止後停止,忽略中間的編譯失敗
        -jN        每次允許N條命令
    使用include指令來包含多個make檔案。如果想忽略include檔案,將用-include指令來代替include指令。

【title】比較和合并原始碼檔案
    diff命令的使用:
        格式:diff [options] srcfile dstfile
        options參數:
        -a        將所有的檔案看作為文本,逐行進行比較
        -b        忽略空白數目改變
        -B        忽略插入或刪除空行造成的改變
        -H        修改diff處理大檔案的方式
        -i        忽略大小寫
        -w        逐行比較時忽略空白
    這個工具沒搞明白,好像出了點問題,輸出的與書本上的例子不一致。

【title】版本管理與控制 RCS(Revision Control System)和CVS(Concurrent Version System)
    RCS的基本用法,ci和co,ci表示檢入檔案到RCS庫中;co表示檢出檔案;
    在第一次檢入某個檔案到RCS庫中時,系統需要你輸入檔案的描述資訊,用"."來結束輸入。使用-i來告訴RCS這是首次檢入的檔案。
    檢出檔案用co -l 檔案名稱。 -r可以指定檢入或檢出的檔案的版本。
    RCS的關鍵字:$Id$ $Log$ $Author$ $Date$ $Header$ $Locker$ $Name$ $RCSfile$ $Revision$ $Source$ $State$ 這些關鍵字可以嵌入到
    程式中,利用ident命令可以顯示關鍵字資訊。如:檔案pen_env
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    static char rcsid[] = "$Id$\n";
   
    int main(void)
    {
        extern char  **environ;
        char **my_env = environ;
        while (*my_env)
        {
            printf("%s\n", *my_env);
            my_env++;
         }
         exit(EXIT_SUCCESS);
     }
     用make prn_env.c編譯後,在命令列輸入$ident prn_env就可以得到$Id$的資訊。
     用$rlog 檔案名稱就可以從RCS資料庫中檢出該檔案被修改的日誌資訊了。

     CVS的使用:
     1.使用$cvs -d dir init命令初始化cvs庫。
     2.設定環境變數$CVSROOT,命令export CVSROOT = dir。
     3.匯入目錄到CVS中,先在CVSROOT下建立一個目錄cdir,然後用命令cvs import [-m msg] cdir lpu2 start,執行就自動把目前的目錄中的檔案匯入到cvs/cdir下.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.