<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    Makefile第一講:一個簡單的Makefile

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    摘要 假定你對linux已經比較的熟悉,假定你編程已經稍有經驗,本文不會對文章作出太多基礎性解釋,看不懂莫怪,只當作給學習的朋友一個引導思路,我也是一個初學者,邊學邊寫,將學會的教給大家,文章有錯誤之處誤導了朋友,請輕噴

    makefile

     

    假定你對linux已經比較的熟悉,假定你編程已經稍有經驗,本文不會對文章作出太多基礎性解釋,看不懂莫怪,只當作給學習的朋友一個引導思路,我也是一個初學者,邊學邊寫,將學會的教給大家,文章有錯誤之處誤導了朋友,請輕噴

    main.cpp

    #include <iostream>
    using namespace std;
    
    int main() {
        cout <<"Hello makefile";
        return 0;
    }
    

    makefile

    test:main.o
    # 復制代碼請注意,開頭必須是一個tab,而不能是四個空格, 否則make會報錯,這是必須的
        g++ main.o -o test
    
    main.o:main.cpp
        g++ -c main.cpp -o main.o
    
    clean:
        rm main.o test
    

    在此,我會一行一行的解釋給大家,暫且把形如這樣的一個代碼塊命名為編譯塊吧,它倆是密不可分的一個整體:

    test:main.o
        g++ main.o -o test
    
    • 要特別注意的是復制代碼后,一定要把每行前邊的空格換成tab,在makefile中tab是命令的開始標志,tab后面的被當作命令執行 ,如果是空格在make時肯定會報錯
    • test:main.o告訴make命令,執行一個叫test的編譯塊,這個編譯塊依賴main.o文件(這句啥意思?請繼續看),test編譯塊會執行命令g++ main.o -o test。g++表明這是編譯c++程序,如果是c程序,請用gcc。這就是題外話了,與makefile無關,如果想了解gcc和g++命令,請在終端輸入: g++ --help
    • main.o:main.cpp與上例類似,就不說了,上邊提到test編譯塊依賴main.o文件,依賴的正是它,也就是說當執行test編譯塊時,test編譯塊需要main.o這個文件,于是它就到目錄里去找main.o,但是它在目錄里找不到main.o,這時他就在makefile文件里找main.o這樣一個編譯塊,于是它就找到了main.o:main.cpp,接著它執行這個編譯塊下邊的命令,然后生成了main.o這個文件,然后再執行test編譯塊中的命令g++ main.o -o test,最終生成可執行文件./test,由于這是一個最簡單的,沒任何依賴的C++程序,因此:其實main.o這個文件就是一個可執行文件,不信你在命令行試試:./main.o(可能需要改為可執行權限chmod u+x main.o
    • clean:編譯塊告訴make 當在終端執行make clean時執行rm main.o test命令,看到make clean你是否想到了在終端執行:make main.omake test命令呢?沒有?這學習態度不太好喲,當你執行了這兩個命令,腦子里應該立刻出現一個疑問:為毛我執行make clean命令就執行clean編譯塊,而我執行make命令卻執行test編譯塊,我并沒有告訴make我要執行test語句塊啊?make是有約定的,如果你不指定讓它執行哪個編譯塊,他就默認執行第一個編譯塊,不妨把clean編譯塊和第一個互換試試!
    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全