自动切换,我们需要使用gcc以这种方式来编译C源代码:编译-ansi -pedantic -Wall用gcc
gcc -ansi -pedantic -Wall program.c
我不知道我怎么能“自动”这个,所以当我输入:
gcc program.c
它会自动编译3个开关。这可能吗?
自动切换,我们需要使用gcc以这种方式来编译C源代码:编译-ansi -pedantic -Wall用gcc
gcc -ansi -pedantic -Wall program.c
我不知道我怎么能“自动”这个,所以当我输入:
gcc program.c
它会自动编译3个开关。这可能吗?
要自动构建任意数量的构建步骤/复杂参数,应该使用makefile。
一旦你有一个makefile,你只需要输入:make
makefile将是传统的方式,特别是作为更大构建过程的一部分。
如果您经常想要在没有makefile的情况下编译,您可以在您的.bashrc
或同等文件中定义一个别名:alias gcc=gcc -ansi -pedantic -Wall
。
您也可以使用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
,您无需添加任何规则。
您可以使用一个shell脚本,该脚本根据其被调用的方式获取一些提示,并在为偶尔的一次性构建设置CFLAGS
后适当调用make
。
假设你有/usr/bin/compile
,这是一个shell脚本,它查看$0
以查看实际调用的名称。然后,您使用符号连接到它命名为pedantic
,fullwarn
等
在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,正如其他人说。
Downvoted的提议硬编码(和碎)的Makefile时用'出口CFLAGS = ...'环境不正是杰夫泰想要潜规则。 (见斯科特威尔斯的答案)。 – 2010-05-22 04:34:24
@马特B:生成文件的目的是简单地介绍,同时给予最简单的例子可能会通过键入使工作makefile文件的概念。不使用隐式规则。我虽然删除了这个例子。如果不是很快,OP很可能会想要对他的makefile做更复杂的事情。 – 2010-05-22 14:43:46