0

对于像我这样的初学者来说,这是一个简单的问题,但是我该怎么做才能像下面这样

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

谢谢。

4

2 回答 2

1

为什么不这样走?

DIR=bin/
all: $(DIR)/run
$(DIR)/run:
        $(CC) $(LIBRARY) $(INCLUDE) run.o -o $@
于 2013-07-23T02:25:28.497 回答
0

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

你可以让它像这样工作:

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

反斜杠意味着这两行被视为一个(以至于需要分号)。$${DIR}符号扩展为to make${DIR}更准确地说,$$扩展为$make忽略{DIR}),然后 shell${DIR}从之前设置的值扩展。当然,您可以省略大括号。

但是,BeSerK 的答案可能正是您想要的。

于 2013-07-23T02:51:33.117 回答