对于像我这样的初学者来说,这是一个简单的问题,但是我该怎么做才能像下面这样
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 变量进行了赋值。在下一行,你有一个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}从之前设置的值扩展。当然,您可以省略大括号。