2016-02-28 71 views
1

我认为这会很好,如果默认打开-Wall标志也不会太坏。我如何配置GCC?如何配置GCC默认显示所有警告?

这是否有任何缺点,除了当你从源代码编译一些大型程序时,大量的警告会使你的终端泛滥?

+0

为什么不把它放在makefile中? –

+1

我不确定您是否可以使用-Wall始终开启配置GCC,但您可以创建一个简单的包装脚本,它总是通过-Wall调用实际的gcc并转发其他参数。 – juzzlin

+0

@ IgnacioVazquez-Abrams因为我是一名学生,只使用makefile编译单个文件程序。 – daltonfury42

回答

0

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 
+0

我正在考虑简单的'#!/ bin/sh exec gcc -Wall“$ @”'(改变行在'exec'之前),但这就是脚本的美妙之处,如果你喜欢它的写法,那就是它的样子。 –

0

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

Writing tests is a good habit,即使你只是在做一些小而无意义的作业代码。它可以让你发现一些你会错过的愚蠢错误,并且确保你不会因为修改它而破坏现有的代码(特别是最后一分钟的修改)。

example这样一个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 

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

另一个好处是你总是运行make来构建任何语言,依赖甚至构建系统(当使用scons或其他构建系统处理项目时,我仍然编写一个Makefile来执行我所做的所有命令当建设和测试!)。

这允许我的个人补充(但在这里,我们完全离题):我有一个名为autobuild的构建脚本在make each time I write a file in vim上循环。我在屏幕上编码并在small window at the bottom of my screen中运行autobuild。这样,每当我写入文件时,就会建立并测试每个更改。