我们需要以这种方式使用gcc编译C源代码:
gcc -ansi -pedantic -Wall program.c
我想知道当我进入时,我怎么能“自动化”这个:
gcc program.c
它将使用3个开关自动编译。这可能吗?
答案 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)
答案 3 :(得分:2)
makefile是传统的方式,特别是作为更大的构建过程的一部分。
如果您经常想要在没有makefile的情况下进行构建,则可以在.bashrc
或等效内容中定义别名:alias gcc=gcc -ansi -pedantic -Wall
。
答案 4 :(得分:2)
您可以使用一个shell脚本,根据其调用方式获取一些提示,并在为偶尔的一次性构建设置make
之后调用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,就像其他人所说的那样。