我们需要使用gcc以以下方式编译C源代码:
gcc -ansi -pedantic -Wall program.c
我想知道如何将以下操作“自动化”,使得当我输入:
gcc program.c
它将会自动编译这3个开关。这是否可能?
您还可以使用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
无需添加任何规则即可完成。
CFLAGS
后调用make
进行偶尔的单独构建。/usr/bin/compile
的shell脚本,它查看$0
以查看实际调用它的名称。然后,您可以创建名为pedantic
、fullwarn
等的符号链接。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。
传统的方式是使用Makefile,特别是在进行更大型构建时。
如果您经常想要在没有Makefile的情况下进行构建,则可以在您的.bashrc
或等效文件中定义别名:alias gcc=gcc -ansi -pedantic -Wall
。