语法控制&调试

Syntax Control & Debugging

本文关键字:调试 控制 语法      更新时间:2023-10-16

如何在makefile上进行语法控制和调试?我使用了g++编译器。我们可以假设下面的代码是我们的示例makefile。谢谢你的建议。

all: sample1
sample1: deneme.o hello.o
         g++ deneme.o hello.o -o sample1
deneme.o: deneme.cpp
         g++ -c deneme.cpp
hello.o : hello.cpp
         g++ -c hello.cpp

通常,您有makefile变量,如:

DEBUG=-Wall -g

并在构建命令中使用它们:

sample1: deneme.o hello.o
    g++ deneme.o hello.o -o sample1
sample1-debug: deneme-debug hello-debug
    g++ $(DEBUG) deneme.o hello.o -o sample1
deneme.o: deneme.cpp
    g++ -c deneme.cpp
deneme-debug: deneme.cpp
    g++ $(DEBUG) -c deneme.cpp
hello.o: hello.cpp
    g++ -c hello.cpp
hello-debug: hello.cpp
    g++ $(DEBUG) -c hello.cpp

然后使用make sample1-degug来调试可执行文件。

就个人经验而言,我会保持makefile的原始结构,并在每个g++配方行中插入CDEBUG变量。(当然,可以使用静态模式改进makefile,但这里的情况并非如此)。通过这种方式,我所要做的就是生成一个可调试的程序,要么改变Makefile中的CDEBUG声明,要么在make调用中重写"make"CDEBUG=-g"。

CDEBUG := -g #(or -ggdb, -g1- -g2 -gdwarf and so on)
all: sample1
sample1: deneme.o hello.o
         g++ deneme.o hello.o -o sample1
deneme.o: deneme.cpp
         g++ $(CDEBUG) -c deneme.cpp
hello.o : hello.cpp
         g++ $(CDEBUG) -c hello.cpp

Paul提供的解决方案可以工作,但是注意它会创建许多不重要的*-debug文件。当然,我也很乐意理解你。