使用g++和Makefiles编译代码时保持打印编译器警告

3
我有一个Makefile,只编译/重新编译必要的内容。然而,即使某些内容已经被编译,我仍希望看到它们的编译警告信息。
我的情况如下: 1)我创建了一个名为snake.cpp的文件。 2)我制作了我的项目。snake.cpp有3个警告和0个错误。 3)我再创建一个名为cup.cpp的文件。 4)我制作了我的项目,现在我看到了cup.cpp的警告,但没有看到任何snake.cpp的警告。
但是我想看到snake.cpp的警告,即使make跳过了编译。我不想使用-Werror重新编译整个项目。实际上,除非我真正编辑了相关文件,否则我不想重新编译任何内容,但我仍想看到警告。
那么,最好的方法是什么呢?

好吧,编译器要么看到文件并发出警告,要么没有看到文件就无法发出警告...你决定想要什么! - user395760
1
你想查看未运行阶段的输出。我猜只有通过某种具有日志文件的系统才能实现:对于每个步骤,将输出重定向到一个文件中,并在每次运行期间回显所有日志文件。 - eriktous
1个回答

3
编译被跳过不是“错误”,而是因为可执行文件/目标文件比源文件更新。这就是 makefile 的工作原理。如果要在不重新编译的情况下获取警告信息,唯一的方法就是将其存储在某个地方。你的解决方案似乎是将错误重定向到日志文件,并在 make 时打印出来。也许这会起作用,但我还没有测试过。
all: snake cup
    @cat snake.err
    @cat cup.err

snake: snake.cpp
    g++ snake.cpp -o snake 2>snake.err

cup: cup.cpp
    g++ cup.cpp -o cup 2>cup.err

.PHONY: all

如果它们都是同一个可执行文件的一部分,您需要创建对象。


一个好的解决方案可以满足我的需求。我只需要添加一个虚拟目标,这样即使所有目标都已编译,.err文件也会被打印出来。谢谢。 - Christian Neverdal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接