【问题标题】:How to configure GCC to show all warnings by default?如何配置 GCC 以默认显示所有警告?
【发布时间】:2016-02-28 18:49:25
【问题描述】:

我认为如果-Wall 标志默认打开,那将是一件好事。如何像这样配置 GCC?

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

【问题讨论】:

  • 为什么不直接放到makefile中呢?
  • 我不确定您是否可以始终使用 -Wall 配置 GCC,但您可以制作一个简单的包装脚本,始终使用 -Wall 调用真正的 gcc 并转发其他参数。
  • @IgnacioVazquez-Abrams 因为我是一名学生,所以我只使用 makefile 编译单个文件程序。
  • 嗯,当我还是个学生的时候,我也将 makefiles 用于单文件程序。
  • @juzzlin 那么你在编写程序时是否复制/重写了makefile?还是有更简单的方法?

标签: linux gcc gcc-warning


【解决方案1】:

如果您使用 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"

【讨论】:

  • 谢谢。这将是问题的正确答案。
【解决方案2】:

juzzlin 建议一个好的方法是为 gcc 编写一个包装器。 Marc Glisse 还建议写一个是实现我想要的最好的方法。所以这就是我所做的。

我为我制作了一个调用 gcc 的 bash 脚本:

#!/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

【讨论】:

  • 我想的只是#!/bin/sh exec gcc -Wall "$@"(在exec之前换行),但这就是脚本的美妙之处,如果你喜欢你写它的方式,那就应该是这样。
【解决方案3】:

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

Writing tests is a good habit,即使您只是为家庭作业编写一小段无关紧要的代码。它允许您发现一些您可能会错过的愚蠢错误,并确保您不会通过修改现有代码(尤其是最后一刻的修改)来破坏现有代码。

这样一个 Makefile 的 example (这里除了测试之外我没有什么要构建的,因为它只是一个标头组件):

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 的构建脚本在 make each time I write a file in vim 上循环。我在屏幕上编码并在small window at the bottom of my screen 中运行autobuild。这样一来,每个更改都会在我编写文件后立即构建和测试。

【讨论】:

    猜你喜欢
    • 2021-03-12
    • 2010-11-29
    • 1970-01-01
    • 2011-08-20
    • 2020-06-24
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 2013-10-26
    相关资源
    最近更新 更多