<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、Makefile傳值給C++代碼

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

    摘要 終端傳值給Makefile,咋傳?只需在終端輸入以下命令,那么就可以在Makefile文件中放心大擔的使用$(abcde)這個變量了,它的值為BBB

    Makefile

     

    fun.h

    #include <iostream>
    
    class Test {
    public:
        void static display(const char *str);
    };
    

    fun.cpp

    #include "fun.h"
    
    void Test::display(const char *str) {
        std::cout <<str;
    }
    

    main.cpp

    #include "fun.h"
    
    int main() {
    #if defined AAA
        Test::display("AAA\n");
    #elif defined BBB
        Test::display("BBB\n");
    #else
        Test::display("CCC\n");
    #endif
        return 0;
    }
    

    makefile

    OBJS = main.o fun.o
    
    test: $(OBJS)
        g++ $(OBJS) -o test
    
    main.o: main.cpp
        g++ -c main.cpp -D$(abcde) -o main.o
    
    fun.o: fun.cpp
        g++ -c fun.cpp -o fun.o
    
    install:
        cp test ~/test
    
    clean:
        rm *.o test
    

    這是一個多文件時編譯makefile的例子,可以看到fun.h始終沒出現在代碼里邊,不用疑惑,fun.cpp已經include進來了。

    一、終端傳值給Makefile,咋傳?只需在終端輸入以下命令,那么就可以在Makefile文件中放心大擔的使用$(abcde)這個變量了,它的值為BBB

    $make abcde=BBB
    

    二、Makefile文件傳變量給C++代碼,其實這是屬于g++的范疇,和makefile無關,只需在g++上加參數-D即可,如上例的g++ -c main.cpp -D$(abcde) -o main.o,終端通過命令make abcde=BBB傳變量給Makefile,Makefile又把該變量傳給g++,g++在編譯時定義該變量,于是main.cpp就可以使用到這個變量(應該是宏`#define BBB 1),如果只是傳了一個變量名而不賦值,它的值就是1,如果想賦值,應該 這樣:

    $make abcde=BBB=3
    

    那么g++ -c main.cpp -D$(abcde) -o main.o就會變成:g++ -c main.cpp -DBBB=3 -o main.o,在C++代碼中便有:#define BBB 3

    復制我例子中的源碼,然后在命令行執行:make abcde=AAAmake abcde=BBB并運行編譯出的程序看看有何不同。

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全