2017-10-10 26 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. 添加以下目标对象的文件。

第二个给你更多的控制目标,但第一种方法是标准的编译方式。

此外,总是尝试使用变量的标准名称,除非您特别需要单独命名它们。