如果是DEBUG,則加參數-Ddebug,release'版本則不加該參數。
一般,在開發測試階段用debug版本,而上線發佈用release版本。
使用Makefile定製編譯不同版本,避免修改程序和Makefile文件,將會十分方便。
讀了一些資料,找到一個解決方法,Makefile預定義宏與條件判斷,結合make預定義變量,進
行條件編譯。 比如,
有一個test.cpp,
包含這段代碼
#ifdef debug//your code
#endif你
希望在debug版本要執行它,在release版本不執行。
我們可以寫這樣的一個Makefile:
1 ver = debug
2
3
ifeq ($(ver), debug)
4
ALL: test_d
5 CXX
FLAGS = -c -g -Ddebug 6 else
7 ALL: test_r
8 CXXFLAGS = -c -O3
9 endif10
11 test_d: test.do
12 g++ -o $@ $^
13
14 test_r: test.ro
15 g++ -o $@ $^
16
17 %.do: %.cpp
18 g++ $(CXXFLAGS) $< -o $@
19
20 %.ro: %.cpp
21 g++ $(CXXFLAGS) $< -o $@
簡單說一下,Makefile根據ver的不同定義了不同的編譯選項CXXFLAGS與輸出程序ALL,debug版本輸出程序是test_d,release版本輸出程序是test_rdebug版本編譯選項是"-c -g -Ddebug",release版本編譯選項是"-c -O3"debug版本object文件後綴是".do",release版本object文件後綴是".ro"debug版本編譯選項使用"-D"定義宏debug,使得your code能夠執行。不同版本的編譯選項、object文件、輸出程序均不同,所以可以同時編譯兩個版本的程序,互不影響。 Makefile執行時,首先判斷ver變量,如果ver的值是debug,編譯debug版,否則編譯release版。當然,默認情況下是編譯debug版的。如果想編譯release版,要怎麼做?只要在執行make時,對ver變量賦值,使得ver的值不爲debug,比如# make ver=release