如何编译一个含多个模块的 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

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

阅读 5.3k
2 个回答

你需要的是学习怎样写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系列

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

gcc **/*.c -o output
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进