对于像我这样的初学者来说,这是一个简单的问题,但是我该怎么做才能像下面这样
all: run
run:
DIR=bin/
$(CC) $(LIBRARY) $(INCLUDE) run.o -o $(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 $@
DIR
如所写,您在一个命令行上对 shell 变量进行了赋值。在下一行,你有一个make
variable的展开DIR
。这不起作用,因为这两行是由不同的 shell 执行的,并且在任何情况下,在运行 shell 之前都会make
展开并且不是变量。$(DIR)
DIR
make
你可以让它像这样工作:
all: run
run:
DIR=bin/; \
$(CC) $(LIBRARY) $(INCLUDE) run.o -o $${DIR}$@
反斜杠意味着这两行被视为一个(以至于需要分号)。$${DIR}
符号扩展为to make
(${DIR}
更准确地说,$$
扩展为$
并make
忽略{DIR}
),然后 shell${DIR}
从之前设置的值扩展。当然,您可以省略大括号。