如果找不到某个包含文件,有没有办法告诉我的 makefile 输出自定义错误消息?
Is there a way to tell my makefile to output a custom error message if a certain an include file is not found?
我有一个 configure
脚本生成一个包含一些变量定义的 config.inc
文件和一个使用
导入这些配置的 makefile
include config.inc
令我困扰的是,如果用户在没有先 运行 配置的情况下尝试直接 运行 makefile,他们会收到一条无用的错误消息:
makefile:2: config.inc: No such file or directory
make: *** No rule to make target 'config.inc'. Stop.
有没有办法让我生成更好的错误消息,指示用户首先 运行 配置脚本,而不求助于从内部生成完整 makefile 的 autoconf 策略 configure
?
好的,没问题;只是做这样的事情:
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.
我放弃并决定使用 autoconf 和 automake 来处理我的 makefile 生成需求。
我有一个 configure
脚本生成一个包含一些变量定义的 config.inc
文件和一个使用
makefile
include config.inc
令我困扰的是,如果用户在没有先 运行 配置的情况下尝试直接 运行 makefile,他们会收到一条无用的错误消息:
makefile:2: config.inc: No such file or directory
make: *** No rule to make target 'config.inc'. Stop.
有没有办法让我生成更好的错误消息,指示用户首先 运行 配置脚本,而不求助于从内部生成完整 makefile 的 autoconf 策略 configure
?
好的,没问题;只是做这样的事情:
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.
我放弃并决定使用 autoconf 和 automake 来处理我的 makefile 生成需求。