博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【嵌入式Linux学习】8、多文件编译与Makefile初探
阅读量:2028 次
发布时间:2019-04-28

本文共 1175 字,大约阅读时间需要 3 分钟。

一、编译链接

正式开始之前呢,先回顾一下程序编译和链接的过程。

源文件【.c】首先会生成中间目标文件【.o】,再由中间目标文件生成执行文件。

在编译时,编译器只检测程序语法以及函数、变量是否被声明。如果函数未被声明,编译器会给出一个警告,但可以生成Object File。而在链接程序时,链接器会在所有的Object File中找寻函数的实现,如果找不到,那到就会报链接错误码(Linker Error)。

二、makefile介绍

Makefile 文件用来告诉计算机,当输入make命令时,需要怎样去编译和链接程序。

1、规则:

  1. 如果这个工程没有编译过,那么我们的所有C文件都要编译并被链接。
  2. 如果这个工程的某几个C文件被修改,那么我们只编译被修改的C文件,并链接目标程序。
  3. 如果这个工程的头文件被改变了,那么我们需要编译引用了这几个头文件的C文件,并链接目标程序。

当Makefile写得够好,所有的这一切,我们只用一个make命令就可以完成,make命令会自动智能地根据当前的文件修改的情况来确定哪些文件需要重编译,从而自己编译所需要的文件和链接目标程序。

2、makefile的语法格式:

target... : prerequisites ...command...

target也就是一个目标文件,可以是Object File,也可以是执行文件。还可以是一个标签(Label)。

prerequisites就是,要生成那个target所需要的文件或是目标。
command也就是make需要执行的命令。(任意的Shell命令)

makefile最本质的一个就是所谓的“依赖”关系,target这一个或多个的目标文件依赖于prerequisites中的文件,其生成规则定义在command中。说白一点就是说,prerequisites中如果有一个以上的文件比target文件要新的话,command所定义的命令就会被执行。

三、makefile牛刀小试

Makefile

main:main.o add.o	gcc main.o add.o -o main	rm -rf *.o

main.c

#include "stdio.h"#include "add.h" int main(){
int a = 5, b =8; printf("result:%d\n",add(a,b));}

add.c

int add(int a,int b){
return a+b;}

add.h

#ifndef __ADD_H__#define __ADD_H__int add(int a,int b);#endif

创建以上文件完毕后,在命令行输入make命令进行编译链接…

在这里插入图片描述

而后输入命令./main,执行可执行文件

在这里插入图片描述

转载地址:http://eznaf.baihongyu.com/

你可能感兴趣的文章
Redis常用命令集
查看>>
CentOS 设置静态IP
查看>>
gcc 编译错误之Clock skew detected
查看>>
configure 编写1
查看>>
Linux下Makefile的automake生成全攻略[zz]
查看>>
gdb 7.11
查看>>
linux系统编程之文件与I/O(六):fcntl 函数与文件锁
查看>>
Linux下socket设置为非阻塞方式和fcntl系统调用
查看>>
CentOS 设置静态IP2
查看>>
C++11 之 lambda表达式
查看>>
APNS推送服务
查看>>
CRON启动ntp服务
查看>>
apache AB
查看>>
VirtualBox Share Folder
查看>>
enable_shared_from_this模板类使用完全解析
查看>>
回调函数的使用
查看>>
python升级导致yum命令无法使用的解决办法
查看>>
const constexpr C++ 解释
查看>>
SecureCRT中文显示乱码
查看>>
将Putty生成的PrivateKey转换为SecureCRT所需的PublicKey
查看>>