<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文件

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

     

    最近一直在學習makefile是如何編寫的。當我們寫的程序文件比較少的時候,敲入gcc /g++,當你在大型工程中,在一個個編譯文件的話,你可能就會很郁悶。linux有一個自帶的make命令,它讓你的工作省去了很大的力氣,但是你要學習如何編寫makefile文件。

    makefile是一種特殊的文件格式,他將會幫你自動管理你的項目,很強大。   下面通過實例一步步講解如何使用makefile。下面的四段代碼。  
    //main.cpp
     
    #include "functions.h" 
     
    int main()
     
    { 
     
    print_hello(); 
     
    cout << endl; 
     
    cout << "The factorial of 5 is " << factorial(5) << endl; 
     
    return 0; 
     
    } 
     
     
     
    //hello.cpp 
     
    #include "functions.h" 
     
    void print_hello()
     
    { 
     
    cout << "Hello World!"; 
     
    } 
     
     
    ///factorial.cpp
     
    #include "functions.h" 
     
    int factorial(int n)
     
    { 
     
    if(n!=1)
     
    { return(n * factorial(n-1)); } 
     
    else return 1; 
     
    } 
     
    //functions.h
     
    void 
     
    print_hello();
     
     int factorial(int n); 

    請將以上文件放到一個目錄下。
     

    請注意: 我用的是g++進行編譯的,你也可以按照你自己的選擇來編譯程序

    make的作用

    如果你運行:    make命令, 它將會自動的在你的目錄下尋找makefile文件,然后執行它,如果你幾個makefile文件,你可以指定某一個特定的makefile文件 使用如下命令:

    make -f  mymakefile

    如果你想知道更多的make 用法,可以執行man  make 命令

     

    執行過程

    1. 編譯器將會編譯你的源文件,然后輸出目標文件
    2. 鏈接器執行目標文件然后創建一個可執行文件。
    手動編譯    

    最不理想的一種執行方式就是

     g++ main.cpp hello.cpp factorial.cpp -o hello

    akefile 基本規則

    makefile的基本規則是有以下構成:

    target: dependencies

    [tab] system command

    利用以上語法編寫如下       

    all:

            g++main.cpp hello.cpp factorial.cpp -o hello

    然后運行你的makefile,如下

    make -f Makefile-1

    如上代碼敘述,所寫的目標是all,all是makefile默認的目標,如果沒有其他規定,make語法將要執行這個目標文件。

    我們還發現,all 目標并沒有依賴的,所以按照命令讓他安全的執行。

    最后,make 通過 我們給的命令進行編譯程序

    使用依賴

    這是因為,如果你修改一個單獨的文件在你的項目,你不必重新編譯一切,只有你修改。 請看下邊的例子

    all: hello
     
    hello: main.o factorial.o hello.o
    	g++ main.o factorial.o hello.o -o hello
     
    main.o: main.cpp
    	g++ -c main.cpp
     
    factorial.o: factorial.cpp
    	g++ -c factorial.cpp
     
    hello.o: hello.cpp
    	g++ -c hello.cpp
     
    clean:
    	rm -rf *o hello
    

    我們看到目標all 只有依賴,沒有系統命令。為了去執行正確,它必須滿足所有的目標所依賴的。目標都回去搜索所有的依賴,然后去執行它。

    在例子中,我們看到了clean的目標,clean 這個目標就是清楚中間生成的.o文件和那些可執行文件

    使用變量和注釋

    當你寫makefil文件的時候,當你想改變一些編譯的一些選項的時候,他是非常有用處的。

    # 這是注釋,CC 編譯器.
     CC=g++
    # CFLAGS  是選項
    CFLAGS=-c -Wall
    #  目標文件
    OBJECTS=main.o factorial.o hello.o
    all: hello
     
    hello: $(OBJECTS)	
        $(CC) main.o factorial.o hello.o -o hello
     
    main.o: main.cpp
    	$(CC) $(CFLAGS) main.cpp
     
    factorial.o: factorial.cpp
    	$(CC) $(CFLAGS) factorial.cpp
     
    hello.o: hello.cpp
    	$(CC) $(CFLAGS) hello.cpp
     
    clean:
    	rm -rf *o hello
    

    你可以看到,使用這些有時候是非常有用的。你可以使用它們,賦值,當你想改變一些變量值的時候,然后你可以使用$(var),

    來應用這些變量

     

    如何繼續下去

    通過以上簡要的介紹,你就可以簡要的去編寫一些更加復雜的makefile來運行你的復雜的程序了。上邊講的只是冰山一角

    ,你可以通過差一些make的文檔來寫。

    CC=g++
    CFLAGS=-c -Wall
    LDFLAGS=
    SOURCES=main.cpp hello.cpp factorial.cpp
    OBJECTS=$(SOURCES:.cpp=.o)
    EXECUTABLE=hello
     
    all: $(SOURCES) $(EXECUTABLE)
    	
    $(EXECUTABLE): $(OBJECTS) 
    	$(CC) $(LDFLAGS) $(OBJECTS) -o $@
     
    .cpp.o:
    	$(CC) $(CFLAGS) {1}lt; -o $@
    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全