如何编写带有目标“错误”的makefile?

Posted

技术标签:

【中文标题】如何编写带有目标“错误”的makefile?【英文标题】:How to write a makefile with target "errors"? 【发布时间】:2015-03-11 12:57:37 【问题描述】:

我需要将目标 errors: 添加到我当前的 makefile 中,以便使用编译器编译多个不同的程序,并打印所有可能出现的错误消息,例如:

 error: expected ';' before 

在我当前的 makefile 中,我已经设置了 gcc 标志 -Wall-Wextra(针对目标 alldebug)——这足以生成完整的错误消息输出吗?

或者是否需要以更具体的方式设置目标errors

编辑:这是我当前Makefile的一部分:

CC = gcc
CFLAGS = -std=c99 -Wall -Wextra

SRC = test.c // here I want to add more programs, how is this possible?
BIN = test

binary: $(SRC)
   $(CC) $(CFLAGS) -o $(BIN) $(SRC) $(LDFLAGS)

all: binary

【问题讨论】:

不清楚你在问什么。请编辑您的问题以显示更多您的Makefile @BasileStarynkevitch 我想他是在问他是否将 -Wall 和 -Werror 与 make 一起使用,它会为他的代码中的错误生成消息。如果没有,他如何通过编辑 makefile 自己生成这些消息 @codebat:你为什么不能简单地运行make -k 没有。 -Wall-Wextra 不会产生任何错误。他们产生警告。如果您的代码不是有效的 C++,而不是启用警告,则会出现错误。如果你的代码不是有效的 C++,你总是会得到错误,你不需要使用一个选项来让编译器告诉你它是无效的。 正如乔纳森所说,总是会报告错误。您也可以使用-Werror 将所有警告变为错误,但警告的主题广泛而复杂。 【参考方案1】:

您可以在Makefile 的第一个目标之前添加

 .PHONY: all clean errors

你会在Makefile的末尾添加

 errors: 
       $(MAKE) -k all

您应该阅读documentation of GNU make

顺便说一句,您可能指的是规则:

binary: $(BIN)

并且您应该避免将可执行文件命名为 test(这是许多 shell 中的内置命令,也是标准的 /usr/bin/test

【讨论】:

是的,听起来就像设置错误一样简单:二进制

以上是关于如何编写带有目标“错误”的makefile?的主要内容,如果未能解决你的问题,请参考以下文章

makefile : 如何链接目标文件

GCC学习 如何编写makefile

如何在没有错误消息的情况下中止makefile

如何影响目标的顺序,为 Makefile.am 添加额外的步骤等?

如何编写Makefile,一份由浅入深的Makefile全攻略(转)

如何编写Makefile,一份由浅入深的Makefile全攻略(转)