如何配置GCC以默认显示所有警告?

时间:2016-02-28 18:49:25

标签: linux gcc gcc-warning

我认为如果-Wall标志默认开启,那将会很好,也不会太糟糕。如何配置这样的GCC?

除了从源代码编译某些大型程序时,很多警告会淹没您的终端这一事实还有什么弊端吗?

3 个答案:

答案 0 :(得分: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"

答案 1 :(得分:0)

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

答案 2 :(得分:0)

正如评论中所讨论的那样(尽管它不能直接回答你的问题),使用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。这样,每次编写文件时都会构建并测试每个更改。