2017-10-10 45 views
1

沒有調試符號我有GDB的問題的Archlinux:在ArchLinux的發現-g

即使我添加-g在我的Makefile GDB說(no debugging symbols found)...done.

但是如果我手動編譯gcc -g *.c它的工作...

我不知道什麼是我的Makefile中不工作?

我的Archlinux:

Linux sime_arch 4.13.4-1-ARCH #1 SMP PREEMPT Thu Sep 28 08:39:52 CEST 2017 x86_64 GNU/Linux 

我的GCC:

gcc version 7.2.0 (GCC) 

我的Makefile:

SRC = test.c \ 
     test2.c 

OBJ = $(SRC:.c=.o) 

NAME = test_name 

CFLAG = -Wall -Werror -Wextra 

all:  $(NAME) 

$(NAME): $(OBJ) 
    gcc -g $(OBJ) -o $(NAME) $(CFLAG) 

clean: 
    rm -f $(OBJ) 

fclean: clean 
    rm -f $(NAME) 

re: fclean all} 

在此先感謝

+4

您正在將'-g'僅添加到鏈接命令。自動編譯命令不會得到'-g'標誌。將'-g'添加到'CFLAGS'本身 –

+0

標準變量是'CFLAGS',使用默認規則,因此您必須使用默認名稱變量將標誌添加到對象編譯中。更多關於make的手冊。 – Stargateur

回答

3

要添加-g僅對鏈接命令。目標文件由make的自動編譯目標生成。這裏沒有-g標誌。

您有2個選項 -

  1. 更改您的變量CFLAGCFLAGS並添加-g它。在$(NAME)目標之前

    %.o: %.c gcc -g $(CFLAG) -o [email protected] $<

    - CFLAGS被自動編譯命令採摘,它會創建調試信息

  2. 添加以下目標對象的文件。

第二個給你更多的控制目標,但第一種方法是標準的編譯方式。

此外,總是嘗試使用變量的標準名稱,除非您特別需要單獨命名它們。