【问题标题】:Makefile Not Applying -g Consistently Despite Rule尽管有规则,Makefile 始终没有应用 -g
【发布时间】:2021-03-08 17:58:36
【问题描述】:

我无法在 gdb 中调试我的应用程序,因为未加载符号表,我正在通过我的程序向后工作以确定导致这种情况发生的原因。提到的第一个建议是在编译时包含 -g 标志,我在我的 makefile 的 CFLAGS 部分中设置了它,但它似乎没有应用于我的文件。

如果不编写一个用我的文件名硬编码的 makefile 以确保它工作,我将如何修改现有的文件以确保将 -g 标志应用于所有已编译的文件?

$ make

g++    -c -o main.o main.cpp
g++    -c -o scanner.o scanner.cpp
g++ -g -Wall -Wno-unused-variable -o scanner main.o scanner.o

我找到了这个 makefile 并插入了我的信息

CFLAGS = -g -Wall -Wno-unused-variable

OBJFILES = main.o scanner.o 
TARGET = scanner

all: $(TARGET)

%.o: %.c
    $(CC) $(CFLAGS) $< -c
    

$(TARGET): $(OBJFILES)
    $(CC) $(CFLAGS) -o $(TARGET) $(OBJFILES)
    

.PHONY: clean
    
clean:
    rm -f $(OBJFILES) $(TARGET) *~

【问题讨论】:

    标签: c++ makefile gdb g++


    【解决方案1】:

    你只需要添加一行:

    CXXFLAGS = -g
    

    由于您的 Makefile 不提供从 C++ 构建的规则,因此 Make 使用默认规则。这些规则将 CXXFLAGS 应用于编译命令,但不应用于 CFLAGS。不要覆盖默认规则;只需添加到 CXXFLAGS。我建议您删除 %.o: %.c 的规则,因为这是 Make 将使用的默认值,并且明确提供重复项没有任何好处。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-20
      • 2020-03-19
      • 2011-04-13
      • 2013-04-11
      相关资源
      最近更新 更多