如何将 GCC 配置为默认显示所有警告



我认为如果默认情况下打开-Wall标志会很好,不会有多坏。如何像这样配置 GCC?

除了从源代码编译一些大型程序时,很多警告会淹没您的终端之外,这有什么缺点吗?

如果你使用 bash 作为你的 shell,请将这些行添加到你的 ~/.bashrc 中。

alias gcc='gcc -Wall'

更新:

您可以在 https://superuser.com/questions/519692/alias-gcc-gcc-fpermissive-or-modifying-configure-script 上参考此问题

如果使用 make,则需要从 .bashrc 中覆盖 make 的变量 CC 和 CXX: export CC="gcc -wall" export CXX="g++ -wall"

Juzzlin建议一个好的方法是为gcc编写一个包装器。 Marc Glisse还建议,写一个是实现我想要的东西的最佳方式。这就是我所做的。

做了一个bash脚本,为我调用gcc:

#!/bin/sh
echo -n "Compiling $1..."

gcc -Wall -Werror -o $(basename $1 .c).out $1
a=$?
if [[ "$a" -eq 1 ]]; then
    echo "Failed!"
else 
    echo "Done." 
    echo "Executing:"
    ./$(basename $1 .c).out
fi

然后我把脚本复制到/usr/bin并使其可执行:

sudo cp car /usr/bin
chmod +x /usr/bin/car

(脚本的名称是car,代表"编译并运行")因此,每当我想编译源文件并运行它时,我都会键入:

car mysourcefile.c

正如评论中所讨论的(尽管它不是对您的问题的直接回答),使用 Makefile 有很多好处。它提供了一个放置构建命令的地方,如果您只使用 make 构建,它将始终保持最新状态。它还简化了在每次构建时运行测试的过程。

编写测试是一个好习惯,即使你只是在为家庭作业处理一小段无关紧要的代码。它允许你发现一些愚蠢的错误,否则你会错过,并确保你不会通过修改它(尤其是最后一分钟的修改)来破坏现有的代码。

这样一个 Makefile 的示例(这里除了测试之外,我没有任何东西可以构建,因为它是一个仅标头组件):

all:
    g++ -O2 -Wall -Werror -std=c++11 test_polynomial.cc -o test_polynomial -lgmp
    g++ -O2 -Wall -Werror -std=c++11 test_g2polynomial.cc -o test_g2polynomial
    ./test_polynomial --log_level=test_suite
    ./test_g2polynomial --log_level=test_suite
clean:
    rm -f test_polynomial test_g2polynomial

注意:这个例子不是一个很好的例子,因为我什至没有分解CFLAGS中的构建选项。如果我想添加一个标志,我必须在两个命令中添加它!

另一个好处是,无论语言、依赖项甚至构建系统如何,您始终运行make进行构建(在使用 scons 或其他构建系统处理项目时,我仍然编写一个 Makefile 执行我在构建和测试时所做的所有命令!

这允许我个人添加它(但在这里我们完全跑题了):我有一个名为 autobuild 的构建脚本,每次我在 vim 中编写文件时都会循环播放。我在屏幕中编码并在屏幕底部的小窗口中运行autobuild。这样,每个更改都会在我写入文件后立即构建和测试。

最新更新