2016-10-18 107 views
0

我有這個Makefile調試標誌和GCC(編譯階段/鏈接階段)

application=<somebinaryname> 
CXXFLAGS=-g -std=c++14 -Wall -Werror -pedantic 
LDFLAGS=-g 

auto: $(application) 

$(application): main.o aaa.o aab.o aba.o baa.o 
     $(CXX) $(LDFLAGS) -o [email protected] $^ 

%.o: %.cpp 
     $(CXX) $(CXXFLAGS) -c $< -o [email protected] 

# rest of Makefile not relevant to my question 

有人可以告訴我,如果-g選項應該是在編譯階段去(與CXXFLAGS)或者在鏈接階段(使用LDFLAGS)?我找實例和文檔無處不在,但它們都具有類似(甚至手冊頁)很簡單的例子:

gcc -g -o binary source.cpp 

我得到的,但它並沒有告訴我很多。

這個更清晰嗎?

回答

0

-g生成調試信息。用-g選項編譯你的C程序。這允許編譯器收集調試信息。然後你可以使用gdb來調試二進制文件。

一些有用的鏈接

http://www.thegeekstuff.com/2010/03/debug-c-program-using-gdb/

https://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html

GCC -g vs -g3 GDB Flag: What is the Difference?

+0

我道歉。我的問題可能不夠清楚。您的鏈接重複了大約5000個不同文檔中已存在的信息。我知道-g會生成未優化的調試二進制文件,並保留所有符號名稱。我知道調試是什麼,調試文件是什麼,爲什麼使用它,它是如何使用的,並且已經使用了很多年。然而,我不確定的是,如果'-g'或'-ggdb'應該在編譯階段(與'-c'一起)或鏈接階段進行?那麼,在我的具體Makefile示例中,是否應該像CXXFLAGS或LDFLAGS一樣,或者兩者都像我一樣? –