使用gcc自动编译-ansi -pedantic -Wall开关

我们需要用这种方式使用gcc编译C源代码:

gcc -ansi -pedantic -Wall program.c 

我想知道如何“自动化”这个,所以当我input:

 gcc program.c 

它会自动编译3个开关。 这可能吗?

你也可以使用make的隐式规则,这样你就不必为每个程序写一个makefile。 Make会自动调用编译器,如果你说make foo并且在当前目录中存在一个foo.c文件。 为此添加标志,在你的环境中定义变量CFLAGS ,例如在bash中,将export CFLAGS="-Wall -pedantic -ansi".bashrc

如果你的程序依赖于多个文件,但是你必须创建一个makefile,但是对于C编译,只要其中一个具有与目标相同的基本名称,就可以列出依赖列表。

例如对于这个makefile:

 # Makefile foo:foo.o bar.o 

运行make将执行命令

 gcc $CFLAGS -c -o foo.o foo.c gcc $CFLAGS -c -o bar.o bar.c gcc -o foo foo.o bar.o 

没有你必须添加任何规则。

要自动构建任意数量的构建步骤/复杂参数,您应该使用makefile 。

一旦你有了makefile,你只需要输入: make

 alias gcc="gcc -ansi -pedantic -Wall" 

但@Brian说,你应该使用一个makefile,或者更好的,像CMake或SCons这样的构建系统。

makefile将是传统的方式,特别是作为更大的构建过程的一部分。

如果您经常需要在没有makefile的情况下进行编译,您可以在.bashrc或等效文件中定义一个别名: alias gcc=gcc -ansi -pedantic -Wall

你可以使用一个shell脚本,通过适当的设置CFLAGS适应偶尔的一次构建,通过调用和调用的方式来获取一些线索。

比方说你有/usr/bin/compile ,这是一个shell脚本,它用$0来查看实际调用它的名字。 然后制作一个名字为“ pedantic ,“ fullwarn ”等的符号链接。

在shell脚本中,像这样:

 OLDCFLAGS=$CFLAGS WHATAMI=$(basename $0) case "$WHATAMI" in pedantic) export CFLAGS="-Wall -pedantic -ansi" make $@ exit $? ;; c99) export CFLAGS="-std=c99 ... ... ..." .... 

然后,用额外的naggy标志编译foo.c:

pedantic foo

这是很方便的,正如我所说的一次性构建,例如试图编译某人在某个问题中发布的代码,或者研究如何使用新的库等。

对于其他任何东西,就像其他人所说的那样,使用makefile。