是否可以从目标节中更新makefile变量



我有一个简单的Makefile,它类似于

CXX = g++
CXXFLAGS = -std=c++17 ...
...
all : $(TARGETS)
% : src/%.cpp $(SRCFILES)
$(CXX) $(CXXFLAGS) $(MACROS) $(INCLUDES) $^ $(LDLIBS) -o $@

我想添加一个profile目标,该目标在被调用时将-pg选项添加到CXXFLAGS变量,然后调用所有目标。

我试过

profile:
CXXFLAGS += -pg
all

但这不起作用,并给出错误:

$make配置文件
CXXFLAGS+=-pg
make:CXFLAGS:找不到命令

正如您所发现的,语法无法工作。配方不是makefile命令,它们是shell脚本,在shell中运行。

您应该为此使用特定于目标的变量:

profile: CXXFLAGS += -pg
profile: all

我应该指出的是,虽然这看起来很有用,但它并不总是那么方便。如果你想用不同的标志构建相同的目标(例如,.o文件(,你必须小心,在构建之间总是手动运行clean,否则你会得到以不同方式构建的对象的混合。

一般来说,经过一段时间后,人们会决定他们真正想做的是将不同类型的目标构建到不同的目录中,这样他们就不会混淆。一旦你做到了,你就需要不同的规则,然后你不妨把额外的标志放在那里。但是,特定于目标的变量在某些情况下仍然很方便。

最新更新