我可以在特定目标中扩展宏吗?

时间:2013-10-17 10:08:18

标签: makefile

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)设置为扩展&& ?

1 个答案:

答案 0 :(得分:0)

game:A:=$(shell read -p 'Enter game version: ' gv && echo $$gv)

注意':='

更新: 在实际构建目标中读取用户输入不是一个好主意。 Make被广泛使用,无论谁调用它 - 他们都不会期待这一点。

我看到两种方法可以做你想做的事:

  1. make version=some_version。它将覆盖version变量(名称几乎可以是任何东西)。如果您已在makefile中分配了其默认值 - 它将更改为some_version(除非使用override标志声明变量,这会禁用此行为)

  2. 创建make config规则,该规则将执行所需的配置操作并将其保存到config.mk中。在makefile中,您可以-include config.mk(' - '符号表示此文件可能会丢失。如果需要(例如包含一些必需的配置选项),请删除减号)。