4

因此,大多数时候,我在测试给定 C/C++ 代码上的每个包含是否正确,我有一个带有 gcc/g++ 调用的生成文件,并带有适当的 -I 选项,用于在特定目录(如每个程序)上搜索头文件时我正在将源代码编译到标题中。

但是,如果包含的目录不正确并且出现了未定义的标头(例如 foo.h 有 #include 并且未找到),gcc/g++ 将为我拥有的该 foo.h 标头的每个包含吐出一堆错误对于我之后编译的所有其他来源(并且我已经在使用 -Werror -Wfatal-errors 使 gcc/g++ 停止)。

所以,我的问题很简单:如何在它找到“没有这样的文件或目录”类型的第一个错误之后告诉 makefile 停止?它继续编译源代码和源代码真的很烦人,仅仅因为我已经理解的重复错误就给了我数百个错误。

4

3 回答 3

3

它可能会继续,因为你告诉它。请参阅 GNU make 的以下两个选项:

-k, --keep-going          Keep going when some targets can't be made.
-S, --no-keep-going, --stop
                          Turns off -k.
于 2012-10-22T09:29:43.353 回答
3

将头文件放入变量中并将该变量用作依赖项。在指定的标头存在之前,以下代码段不会构建任何内容。

HEADERS=test.h other.h /usr/include/special.h

all: $(HEADERS) $(BINPROGS)

[... all other rules go here as usual ...]

*.h:
    echo found $@

“.h:”只是打印出在任何建筑物开始之前找到的每个标题。如果找不到头文件,makefile 本身就会停止(它在尝试编译任何东西之前停止)。

我相信这就是你想要的?

于 2012-10-22T09:32:45.827 回答
0

您可以在运行 make 脚本之前编写一个 shell 脚本来检查错误情况。

于 2012-10-22T09:26:56.723 回答