2010-05-22 88 views
3

自动切换,我们需要使用gcc以这种方式来编译C源代码:编译-ansi -pedantic -Wall用gcc

gcc -ansi -pedantic -Wall program.c 

我不知道我怎么能“自动”这个,所以当我输入:

gcc program.c 

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

回答

8

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

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

+2

Downvoted的提议硬编码(和碎)的Makefile时用'出口CFLAGS = ...'环境不正是杰夫泰想要潜规则。 (见斯科特威尔斯的答案)。 – 2010-05-22 04:34:24

+0

@马特B:生成文件的目的是简单地介绍,同时给予最简单的例子可能会通过键入使工作makefile文件的概念。不使用隐式规则。我虽然删除了这个例子。如果不是很快,OP很可能会想要对他的makefile做更复杂的事情。 – 2010-05-22 14:43:46

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

但正如@布赖恩说,你真的应该使用一个makefile,或更好,构建系统,如CMakeSCons

+3

我只能说这东西,除了'gcc'所以,如果我曾经想在非疯狂naggy模式中使用它,我仍然可以调用'gcc'。 – nategoose 2010-05-22 02:52:23

+0

@nategoose:如果你想打电话给“普通” GCC而不调用别名,你会放一个反斜杠在命令\ GCC的前面,以防止别名替换。 – dadinck 2013-03-08 21:18:16

2

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

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

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 

,您无需添加任何规则。

2

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

假设你有/usr/bin/compile,这是一个shell脚本,它查看$0以查看实际调用的名称。然后,您使用符号连接到它命名为pedanticfullwarn

在shell脚本本身,是这样的:

OLDCFLAGS=$CFLAGS 
WHATAMI=$(basename $0) 

case "$WHATAMI" in 
    pedantic) 
     export CFLAGS="-Wall -pedantic -ansi" 
     make [email protected] 
     exit $? 
    ;; 
    c99) 
     export CFLAGS="-std=c99 ... ... ..." 
     .... 

然后,编译foo中。c。与额外naggy标志:

pedantic foo

这是很方便的,正如我所说的一次性版本,例如试图编译代码,有人张贴在一个问题,或制定出如何使用新的库等

为别的,只使用一个makefile,正如其他人说。