尽管有规则,Makefile 未始终如一地应用 -g

Exh*_*xho 0 c++ gdb makefile g++

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

如果不编写使用我的文件名进行硬编码的 makefile 以确保其正常工作,我将如何修改现有的 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
Run Code Online (Sandbox Code Playgroud)

我找到了这个 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) *~
Run Code Online (Sandbox Code Playgroud)

Wil*_*ell 5

您只需要添加以下行:

CXXFLAGS = -g
Run Code Online (Sandbox Code Playgroud)

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