Makefile的規則相對來說還是比較復雜的,上手不容易,沒有系統研究過,往往搞不清楚狀況。如果掌握了基本的調試手段,那對我們寫出正確的Makefile會非常有幫助。而在Makefile中,最重要的調試手段莫過於輸出信息。
Makefile中需要打印信息,可以通過如下方法:
$(info info text)、$(warning warning text)或者$(error error text)
示例:
CXX = g++ CompileOpt = -g -std=gnu++11 LinkOpt = -lpthread $(asan) Target = main $(Target) : main.o memory_leak.o $(CXX) main.o memory_leak.o -o $(Target) $(LinkOpt) $(info info text) $(warning warn text) $(warning $(asan)) $(error error text) main.o : main.cpp memory_leak.h $(CXX) -c $(CompileOpt) main.cpp memory_leak.o : memory_leak.cpp memory_leak.h $(CXX) -c $(CompileOpt) memory_leak.cpp clean: rm main.o memory_leak.o
編譯輸出:
$ make asan='-fsanitize=leak -fsanitize=address' g++ -c -g -std=gnu++11 main.cpp g++ -c -g -std=gnu++11 memory_leak.cpp info text Makefile:11: warn text Makefile:11: -fsanitize=leak -fsanitize=address Makefile:11: *** error text. Stop.
可以看到,info、warning、error三種輸出各有不同,其中error輸出甚至會中斷編譯過程。可以根據不同的需求,用不同的方式輸出信息,寫出滿意的Makefile