多次定义makefile变量

时间:2017-08-22 12:53:11

标签: linux unix makefile gnu-make

我阅读了GNU make文档的Using Variables部分,但是在多次定义make变量时,无法理解make变量是如何扩展的。

例如,请参阅以下简短的makefile:

public void loadIdTypes() {
    mAPIService.loadIdTypes().enqueue(new Callback<IdType>(){
        @Override
        public void onResponse(Response<IdType> response, Retrofit retrofit) {
            String name = response.body().getData().toString();
            Log.i("cityName", name);

        }

        @Override
        public void onFailure(Throwable t) {

        }
    });
}

在运行.PHONY: run run: a b TARGET := a $(TARGET): echo $(TARGET) touch $@ TARGET := b $(TARGET): echo $(TARGET) touch $@ 时产生以下输出:

make

似乎echo b b touch a echo b b touch b 有一个目标,自动变量a确实是$@。但是回显a变量,这也是目标名称,打印TARGET ......这里发生了什么? 我很感激任何帮助,最好是链接到文档,澄清这种行为。

其他可能相关的问题:

  1. 调用b时,makefile只读一次吗?
  2. 读取makefile时是否扩展了目标名称
  3. 读取makefile时是否扩展了目标规则
  4. 注意:使用递归扩展变量(即将make更改为:=)并不会更改上例中的输出。

1 个答案:

答案 0 :(得分:3)

您正在寻找的信息可以在GNU制作手册部分How make Reads a Makefile中找到。