0
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) 并且它会要求用户一遍又一遍地输入游戏版本。$(A) 仅在用户不指定game目标时才具有默认内容“演示”。

那么,有没有办法将 $(A) 设置为扩展 && ?

4

1 回答 1

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('-'符号表示这个文件可能丢失。如果需要它(例如包含一些强制性配置选项),删除减号)。

于 2013-10-17T10:48:46.117 回答