Makefile规则导致不必要的重建

时间:2014-02-07 15:27:53

标签: makefile gnu-make

我有一条规则检查是否设置了某个环境变量:

check-env:
  ifndef NODE_ENV
    $(error NODE_ENV is undefined)
  endif

然后我有依赖它的东西(如果没有设置NODE_ENV则会失败):

sql/schema.js: sql/schema.sql check-env
  ...

我的问题是check-env总是导致重建,我应该以合理的模块方式实现我想要的目标?

1 个答案:

答案 0 :(得分:1)

你为什么要在目标的配方中这样做?为什么不把它放在makefile的主要部分呢?

ifndef NODE_ENV
  $(error NODE_ENV is undefined)
endif

如果您真的希望通过规则完成此操作,那么您最好的选择(假设您使用的是“足够新”的GNU make版本)就是使用这样的仅限订单的先决条件:

check-env:
        $(if $(NODE_ENV),,$(error NODE_ENV is undefined))

sql/schema.js: sql/schema.sql | check-env
        ...

(注意管道符号|)。有关详细信息,请参阅手册。