A = "demo"
%.o:%.cpp
$(CC) -c $^ $(A) -o $@
default:$(all_objs)
game:A = $(shell read -p 'Enter game version: ' gv && echo $$gv)
game:$(all_objs)
上面只是一个片段makefile。如果我make game
,主要问题是每个源代码编译都会扩展$(A),它会要求用户反复输入游戏版本。只有当用户没有制作game
目标时,$(A)才会有默认内容“demo”。
那么,有没有办法将$(A)设置为扩展&& ?
答案 0 :(得分:0)
game:A:=$(shell read -p 'Enter game version: ' gv && echo $$gv)
注意':='
更新: 在实际构建目标中读取用户输入不是一个好主意。 Make被广泛使用,无论谁调用它 - 他们都不会期待这一点。
我看到两种方法可以做你想做的事:
make version=some_version
。它将覆盖version
变量(名称几乎可以是任何东西)。如果您已在makefile中分配了其默认值 - 它将更改为some_version
(除非使用override
标志声明变量,这会禁用此行为)
创建make config
规则,该规则将执行所需的配置操作并将其保存到config.mk中。在makefile中,您可以-include config.mk
(' - '符号表示此文件可能会丢失。如果需要(例如包含一些必需的配置选项),请删除减号)。