linux下多文件编译以及makefile的用法
来源:互联网 发布:nex5t 软件b 编辑:程序博客网 时间:2024/06/06 02:54
linux C下多文件编译,以及Makefile的使用
由于在C语言中,不能把所有的代码都放在一个.c文件里面,这样这个.c文件会很大,而且代码维护起来会很麻烦。
于是在网上找了些C语言多文件编程的示例,记录下我的学习过程。
我们可以把我们的代码按功能进行划分,一些源文件存放函数的实现,一些头文件声明这些函数,这样代码会更有条理。
头文件的大致格式:(注意,头文件中一般只能有申明,不能有定义,否则会出现重定义错误——multiple definition of。。。)
#ifndef _ABC_H_
在写头文件的时候,有一点需要特别的注意,(一般情况下)定义不能放在头文件里面,需要放在一个单独的c文件里面,头文件里面只能有一个申明,如: extern Type A。
要对以上要求进行解释,我们需要了解编译的过程:
编译的第一步是把所有的CPP文件编译成为点O文件,而且每一个点CPP文件都是单独编译的,该点CPP文件中用到的类型必须在它所include 的头文件当中找到,相当于把它所有include的文件中的代码都加到该CPP文件的前面,
但是声明的部分将不会出现在编译后的点O文件,相当于每个 CPP文件都是单独编译,因此它的ifndef在一个文件里是没有用的,两个CPP文件里如果包含同一个有ifndef的头文件,效果是两个CPP文件都 把该头文件加到它的前面,但不会把声明的部分放到点O文件中,而会把头文件中定义的部分都输出到编译后的点O文件当中,因此如果在头文件当中有一个定义,那么如果有两个CPP文件当中include了它,那么将会出现重定义错误,multiple definition of
接下来介绍下多文件编程的小例子
功能:在main.c里面调用其他两个源文件里面的函数,然后输出字符串。
1、main.c
#include”mytool1.h”
2、 mytool1.h mytool1.c
//mytool1.h
3、 mytool2.h mytool2.c
//mytool2.h
#include<stdio.h>void mytool2_print(char* print_str){ printf(“This is mytool2 print %s\n”,print_str); }
在linux下,把这几个文件放在同一个目录下,然后在shell中输入
gcc -c main.cgcc -c mytool1.cgcc -c mytool2.cgcc main.o mytool1.o mytool2.o -o main
就可以生成可执行文件 main
关于 Makefile
如果项目中的源文件改动一次,那项目就要重新编译一次,这样会很麻烦。一个Makefile文件就可以解决这个问题。Makefile文件里面存在编译的指令,这样源文件改变一次,我们只要重新Make一下,项目就会编译好,会很方便。
cc=gcctarget=mainobj=main.o mytool1.o mytool2.o$(target):$(obj) $(cc) $(obj) -Wall -o $(target)main.o:main.c $(cc) -c main.cmytool1.o:mytool1.c $(cc) -c mytool1.cmytool2.c:mytool2.c $(cc) -c mytool2.c.PHONY:clean $(RM) </span>*.o $(target)
转载自:http://www.cnblogs.com/tqianly/p/4374735.html
- linux下多文件编译以及makefile的用法
- Linux下C多文件编译Makefile
- linux下makefile多文件编译
- Linux下的Makefile编译
- linux下makefile的用法
- 编译Linux内核(下)---KConfig、Makefile详解以及ARM平台Linux内核的编译
- Makefile方法编译Linux下多文件工程
- Makefile编译目录下多个文件以及函数wildcard用法
- Makefile编译目录下多个文件以及函数wildcard用法
- Makefile编译目录下多个文件以及函数wildcard用法
- Openwrt下的makefile文件、编译
- makefile编译一个目录下的文件
- linux下多个cpp文件的Makefile编译
- linux下多个cpp文件的Makefile编译
- Linux下gcc与g++用法以及编写makefile
- Linux下gcc与g++用法以及编写makefile
- Linux下gcc与g++用法以及编写makefile
- Linux下gcc与g++用法以及编写makefile
- 实现更换头像功能
- Color Detection 颜色定位
- 竖式问题
- hdu 1724(Simpson积分)
- fl2440——DS18B20 驱动编写
- linux下多文件编译以及makefile的用法
- java 类File的方法: mkdir()方法与mkdirs()的区别
- 二分查找总结
- NYOJ58
- Linux启动代码boot.s理解
- android studio 启动出现Unable to access Android SDK add-on list错误
- 清除ubuntu的回收站中的大量文件
- 贪心通用证明套路
- 大型网站技术架构(一)--大型网站架构演化