用gns自动编译-ansi -pedantic -Wall开关

时间:2010-05-22 02:42:45

标签: c linux gcc

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

gcc -ansi -pedantic -Wall program.c

我想知道当我进入时,我怎么能“自动化”这个:

gcc program.c

它将使用3个开关自动编译。这可能吗?

5 个答案:

答案 0 :(得分:9)

您还可以使用make的隐式规则,这样您就不必为每个程序编写makefile。如果您说make foo并且当前目录中存在foo.c文件,Make将自动调用编译器。要为此添加标记,请在您的环境中定义变量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

无需添加任何规则。

答案 1 :(得分:8)

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

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

答案 2 :(得分:3)

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

但正如@Brian所说,你真的应该使用makefile,或者更好的,使用像CMakeSCons这样的构建系统。

答案 3 :(得分:2)

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

如果您经常想要在没有makefile的情况下进行构建,则可以在.bashrc或等效内容中定义别名:alias gcc=gcc -ansi -pedantic -Wall

答案 4 :(得分:2)

您可以使用一个shell脚本,根据其调用方式获取一些提示,并在为偶尔的一次性构建设置make之后调用CFLAGS

假设您有/usr/bin/compile,这是一个shell脚本,它会查看$0以查看实际调用它的名称。然后,您可以为其创建名为pedanticfullwarn等的符号链接

在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,就像其他人所说的那样。