有没有办法告诉我的makefile输出自定义错误消息,如果找不到某个包含文件?

时间:2015-04-02 21:33:50

标签: include makefile

我有一个configure脚本,用于生成包含一些变量定义的config.inc文件和一个使用

导入这些配置的makefile
include config.inc

困扰我的是,如果用户在没有先运行configure的情况下尝试直接运行makefile,则会收到无用的错误消息:

makefile:2: config.inc: No such file or directory
make: *** No rule to make target 'config.inc'.  Stop.

有没有办法让我产生更好的错误信息,指示用户首先运行configure脚本,而不采用从configure内部生成完整makefile的autoconf策略?

2 个答案:

答案 0 :(得分:5)

当然,没问题;做这样的事情:

atarget:
        echo here is a target

ifeq ($(wildcard config.inc),)
  $(error Please run configure first!)
endif

another:
        echo here is another target

include config.inc

final:
        echo here is a final target

注意这绝对是GNU make特有的;没有可移植的方法来做到这一点。

编辑:上面的例子可以正常工作。如果文件config.inc存在,那么它将被包含。如果文件config.inc不存在,则make将在读取makefile时退出(作为error函数的结果)并且永远不会到达include行,因此将不会关于丢失包含文件的模糊错误。这就是原始海报所要求的。

EDIT2:这是一个运行示例:

$ cat Makefile
all:
        @echo hello world

ifeq ($(wildcard config.inc),)
  $(error Please run configure first!)
endif

include config.inc

$ touch config.inc

$ make
hello world

$ rm config.inc

$ make
Makefile:5: *** Please run configure first!.  Stop.

答案 1 :(得分:0)

我放弃了,决定使用autoconf和automake来处理我的makefile生成需求。