我正在尝试编译一个具有 main.c 和大量 .c 和 .h 文件的程序。有没有什么方法可以编译和链接,而无需在 gcc 命令中传递所有 .c 文件,例如
gcc main.c file.c file2.c -o main
您的 shell 可以扩展通配符。这样你就可以:
gcc *.c -o main
当然,您必须确保*.c
目录中没有任何您实际上不想编译的额外文件。更好的选择是使用 Make 或 SCons 等构建系统。
'make' 是构建 C 应用程序的工具。下面是hello world版本。
$ cat main.c
#include <stdio.h>
int main (char *argv[], int argc) {
printf("Hello World\n");
return 0;
}
$ make main
cc main.c -o main
$ ./main
Hello World
编辑尊重 Shahbaz 评论:最初的问题是试图简化 gcc 的命令行。程序员的正确方向是学习make。由于 make 有一点学习曲线,我想提供一个简单的垫脚石来做一些有用的事情。通过以这种方式开始,您不需要生成文件。只需键入“make programname”,如上所示。Make 使用它的默认规则和相关的变量。$(CC) -c $(CFLAGS) $(CPPFLAGS) 精明的程序员可以通过设置众所周知的变量来构建它。
从这里可以修改生成文件。本着踏脚石的精神,考虑这个琐碎的makefile
$ cat makefile
SRCS = main.c
OBJ = ${SRCS:.c=.o}
CC=gcc
main: ${OBJ}
$ make
gcc main.o -o main
通过设置众所周知的 make 变量 CC 来控制使用哪个编译器。OBJ 是从源文件列表中计算出来的。琐碎的目标开始了通向规则的道路。
无论如何,我希望这篇文章和其他答案能让最初的提问者走上正轨。
问候,-jk
gcc -o main -I. `find . -name "*\.c"`
这样,如果您愿意,您可以将 .c 和 .h 文件放在子文件夹中。
但是,这不是一个好方法。更好的方法是创建一个Makefile
如果您询问命令行,您可以使用通配符来指定所有 .c 文件,如@Man of One Way 建议的那样。但总的来说,任何大小的 C 应用程序都是使用非常有用的“makefile”构建的。
您可能想阅读教程,例如http://www.cs.umd.edu/class/fall2002/cmsc214/Tutorial/makefile.html
如前所述,make 是最好的方法 了解你在每个点上需要的东西
此外,在编码时使用一些可以帮助您的标志也很重要:
-Wall -> sets all warning flags
-g, -ggdb -> generates debug code
-ansi, -std=c99
关于如何使用 make 的一本非常好的书是 http://shop.oreilly.com/product/9780937175903.do