2012-07-08 153 views
1

我在编译一个有main.c和很多.c和.h文件的程序。 有什么办法来编译和链接没有通过所有.c文件在海湾合作委员会的命令 像用gcc编译.c

gcc main.c file.c file2.c -o main 
+3

学习如何编写'Makefile',你不会后悔的。 – Shahbaz 2012-07-08 21:54:07

回答

6

您的shell可以扩展通配符。所以,你可以:

gcc *.c -o main 

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

+0

但是如果有。 c在同一个目录下,我不希望被包含在内。 – unfamous 2012-07-08 21:53:44

+0

是的,使用构建脚本系统,如Make或SCons。用手做这件事是不可持续的。 – 2012-07-08 21:56:46

+0

我在找的是一个简单的方法,只是给他包含主(main.c)的文件,他发现其余 – unfamous 2012-07-08 22:03:47

0
gcc -o main -I. `find . -name "*\.c"` 

这样,如果你愿意,你可以有子文件夹中的.c和.h文件。

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

+0

但是,这将包括该目录中的所有文件。如果我有一个我不想使用的文件,会发生什么问题 – unfamous 2012-07-08 21:50:59

+0

然后,继续创建一个Makefile :) – 2012-07-08 22:03:21

3

“使”是构建C应用程序的工具。以下是你好世界版本。

$ 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 

编辑在尊重沙巴兹·评论: 原来的问题正在努力简化命令行的GCC。程序员的正确方向是了解make。由于make有一点点的学习曲线,我想提供一些简单的垫脚石来做一些有用的事情。通过这种方式开始,您不需要make文件。只需键入'make programname',如上所示。使用它的默认规则和关联的varabiles。 $(CC)-c $(CFLAGS)$(CPPFLAGS)聪明的程序员可以通过设置众所周知的变量建立在此。

从这里可以用一个makefile鼓捣。在垫脚石的精神,考虑这个繁琐的makefile

$ cat makefile 

SRCS = main.c 
OBJ = ${SRCS:.c=.o} 
CC=gcc 

main: ${OBJ} 

$ make 
gcc main.o -o main 

通过设置众所周知make变量CC来控制使用哪种编译器。 OBJ是从源文件列表中计算出来的。中产阶级的目标是通向规则之路。

不管怎么说,所以我希望这个职位和其他答案获得方式有原来的提问。

问候, -JK

+0

hello world版本不应该关注'Makefile'的内容而不是程序? – Shahbaz 2012-07-08 21:54:54

0

前面已经说了,提出的是去 了解你需要在每一点上

除了刚才什么是最好的方式,它也使用一些标志,这将帮助是非常重要的你出去而编码:

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

一个真正好的书介绍如何使用化妆是, http://shop.oreilly.com/product/9780937175903.do