Makefile第三講:終端傳值給Makefile、Makefile傳值給C++代碼
睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接
這是一個多文件時編譯makefile的例子,可以看到
一、終端傳值給Makefile,咋傳?只需在終端輸入以下命令,那么就可以在Makefile文件中放心大擔的使用
二、Makefile文件傳變量給C++代碼,其實這是屬于g++的范疇,和makefile無關,只需在g++上加參數
那么
復制我例子中的源碼,然后在命令行執行:
RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
摘要 終端傳值給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