0

我是 makefile 的新手,我正在尝试添加一个 make 调试模式。

我有以下内容:

CXXFLAGS=-Wall -c

debug: $(EXECUTABLE)
     CXXFLAGS+=-pg

all:
....

出于某种原因它分配它,当我把 make debug 它给我

CXXFLAGS+=-pg
/bin/sh: CXXFLAGS+=-pg: not found
make: *** [debug] Error 127

除了 -pg 标志外,有什么办法可以避免在调试中再次写入整个 all 命令?

我试图删除 debug: target 和 CXXFLAGS 与 -pg 标志成功连接

4

2 回答 2

3

如果您使用的是 gnumake,只需添加:

debug: CXXFLAGS += -pg
debug: $(EXECUTABLE)

请注意,通常首先定义all,因此它是默认值。如果Makefile 中的规则debug出现在之前,则成为默认值(如果是第一个)。alldebug

于 2012-11-05T22:06:21.460 回答
0

目标下方的所有制表符缩进行都直接通过管道传输到 shell 子进程,但是您的 CXXFLAGS 行使用的是 Makefile 语法,而不是有效的 shell 语法。

更糟糕的是,即使您使用 shell 语法,设置变量也不会延续到在不同目标下执行的行;它们只会影响同一目标下的 shell 命令,然后,只有当所有行都用\转义字符连接时。

Make 将从环境变量中读取值,因此您可以在运行 make 时设置环境变量,例如(Bourne-family shells):

myprompt$ CXXFLAGS=" -pg $CXXFLAGS" make
于 2012-11-05T22:10:13.203 回答