我认为如果-Wall
标志默认开启,那将会很好,也不会太糟糕。如何配置这样的GCC?
除了从源代码编译某些大型程序时,很多警告会淹没您的终端这一事实还有什么弊端吗?
答案 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)
我制作了一个为我调用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
。这样,每次编写文件时都会构建并测试每个更改。