我有一个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策略?
答案 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生成需求。