Makefile,在可执行文件中声明变量

Makefile,在可执行文件中声明变量,makefile,Makefile,对于像我这样的新手来说,这是一个简单的问题,但是我能做些什么来像下面这样呢 all: run run: DIR=bin/ $(CC) $(LIBRARY) $(INCLUDE) run.o -o $(DIR)$@ 谢谢。为什么不这样去呢 DIR=bin/ all: $(DIR)/run $(DIR)/run: $(CC) $(LIBRARY) $(INCLUDE) run.o -o $@ 如前所述,您在一个命令行上为shell变量DIR赋值。在

对于像我这样的新手来说,这是一个简单的问题,但是我能做些什么来像下面这样呢

all: run
run:
        DIR=bin/
        $(CC) $(LIBRARY) $(INCLUDE) run.o -o $(DIR)$@
谢谢。

为什么不这样去呢

DIR=bin/
all: $(DIR)/run
$(DIR)/run:
        $(CC) $(LIBRARY) $(INCLUDE) run.o -o $@

如前所述,您在一个命令行上为shell变量
DIR
赋值。在下一行,您有一个
make
变量
DIR
的扩展。这不起作用,因为这两行由不同的shell执行,并且在任何情况下,
make
在运行shell之前展开
$(DIR)
,并且
DIR
不是
make
变量

你可以这样做:

all: run
run:
        DIR=bin/; \
        $(CC) $(LIBRARY) $(INCLUDE) run.o -o $${DIR}$@
反斜杠表示两行被视为一行(如此之多以至于需要分号)。
$${DIR}
表示法通过
make
扩展为
${DIR}
(更准确地说,
$$
扩展为
$
,并且
make
忽略
{DIR}
),然后shell从前面设置的值扩展为
${DIR}
。当然,你可以省略大括号


但是,by可能就是您要查找的对象。

实际上,我知道如何在make文件上使用多个独立目标。非常感谢你,贝塞克也一样。