如何编译一个含多个模块的 C 语言程序?


现有如下文件夹:


 main/
main.c MO1/ MO2/ MO3/

其中 MO1 MO2 MO3 分别是程序的一个模块,节构都是:


 MO1/
mo1.c mo11.c mo12.c mo13.c

main.c 调用 mo1.c mo2.c mo3.c
mo1.c 又调用 mo11.c mo12.c mo13.c

暂不考虑参数传递等问题,应该如何编译呢?

c 编译器

邓迪的钩子 9 years, 8 months ago

简单粗暴的方法,把所有 .c 文件一起给 gcc 编译。如果你用 zsh 的话:


 gcc **/*.c -o output

薛定谔的闪闪 answered 9 years, 8 months ago

你需要的是学习怎样写 makefile

如果你是伸手党,在根目录下创建一个文件名为 makefile 的文件,并按照下面的方法写:


 #this is a makefile
objects = main.o mo1.o mo2.o mo3.o mo11.o mo12.o
compiler = gcc

main: $(objects)
    $(compiler) -o main $(objects)
clean:
    rm main *.o

然后你只要在terminal上输入 make ,就编译好了;如果输入 make clean ,则会清空编译出来的文件:


 JerryMac:Dev Jerry$ make
cc    -c -o main.o main.c
cc    -c -o mo1.o mo1.c
cc    -c -o mo2.o mo2.c
cc    -c -o mo3.o mo3.c
cc    -c -o mo11.o mo11.c
cc    -c -o mo12.o mo12.c
gcc -o main main.o mo1.o mo2.o mo3.o mo11.o mo12.o
JerryMac:Dev Jerry$ make clean
rm main *.o
JerryMac:Dev Jerry$ ls
main.c      mo1.c       mo12.c      mo3.c
makefile    mo11.c      mo2.c

如果你想要深究什么是makefile,上面那段makefile为什么这么写,以及如何写makefile。
我推荐你阅读: 跟我一起写Makefile系列

小龙救世界 answered 9 years, 8 months ago

Your Answer