1

我正在尝试编译一个具有 main.c 和大量 .c 和 .h 文件的程序。有没有什么方法可以编译和链接,而无需在 gcc 命令中传递所有 .c 文件,例如

gcc  main.c file.c file2.c -o main
4

5 回答 5

6

您的 shell 可以扩展通配符。这样你就可以:

gcc *.c -o main

当然,您必须确保*.c目录中没有任何您实际上不想编译的额外文件。更好的选择是使用 Make 或 SCons 等构建系统。

于 2012-07-08T21:50:16.140 回答
3

'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

于 2012-07-08T21:54:10.067 回答
0
gcc -o main -I. `find . -name "*\.c"`

这样,如果您愿意,您可以将 .c 和 .h 文件放在子文件夹中。

但是,这不是一个好方法。更好的方法是创建一个Makefile

于 2012-07-08T21:48:31.440 回答
0

如果您询问命令行,您可以使用通配符来指定所有 .c 文件,如@Man of One Way 建议的那样。但总的来说,任何大小的 C 应用程序都是使用非常有用的“makefile”构建的。

您可能想阅读教程,例如http://www.cs.umd.edu/class/fall2002/cmsc214/Tutorial/makefile.html

于 2012-07-08T21:51:54.263 回答
0

如前所述,make 是最好的方法 了解你在每个点上需要的东西

此外,在编码时使用一些可以帮助您的标志也很重要:

-Wall -> sets all warning flags
-g, -ggdb -> generates debug code
-ansi, -std=c99

关于如何使用 make 的一本非常好的书是 http://shop.oreilly.com/product/9780937175903.do

于 2012-07-09T15:16:25.160 回答