论Makefile的重要性(一)-----Linux C开发

  我们在开发程序的过程中,一般使用IDE较多,用C++、C#的使用Vistual Studio2012或者更高版本,用Java的使用Eclipse。一般企业使用这些IDE较多。但是在Linux环境下编程,我们使用什么呢,刚接触Makefile的时候感觉这货很神奇。用的久了就会发现话会大大的提高开发项目的效率,有人会说,我们一般不开发大型项目,就是写点小程序,用不着使用什么Makefile,但是如果你用过一次,我相信你会爱不释手,如果你掌握了如何编写Makefile,会对你将来的开发生涯有莫大的帮助,接下来咱们进入正题。

  在C/C++语言开发过程中,我们首先是把源文件编译成中间代码,在Windows下就是.obj文件,Linux下就是.o文件,即目标文件(object file),然后将 大量的.obj/.o文件通过链接(link)生成可执行文件。

  Makefile的规则:

target(目标):prerequisites(依赖/条件)

    command (命令)

其中target是object file,可以依赖多个目标文件,prerequisites是生成target所需的文件或目标。command就是make要执行的命令。下面举例说明:

创建一个工程math,其中包含5个.c文件和一个.h文件。

sub.c
int sub(int a, int b)
{
    return a-b;
}

mul.c
int mul(int a, int b)
{
    return a*b;
}

div.c
int devl(int a, int b)
{
    return a/b;
}

add.c
int add(int a, int b)
{
    return a+b;
}
main.c
int main(void)
{

  printf("add:%d\n",add(1,2));
  printf("sub:%d\n",sub(1,2));
  printf("mul:%d\n",mul(1,2));
  printf("div:%d\n",div(1,2));

}
common.h

#ifndef MYMATH_H_
#define MYMATH_H_

int add(int a, int b);
int sub(int a, int b);
int mul(int a, int b);
int devl(int a, int b);

#endif

以下就是makefile的最简单写法:

libmath.a:add.o sub.o mul.o devl.o
	ar rcs libmath.a add.o sub.o mul.o devl.o
add.o:add.c
	gcc -c add.c
sub.o:sub.c
	gcc -c sub.c
mul.o:mul.c
	gcc -c mul.c
devl.o:devl.c
	gcc -c devl.c

.PHONY:clean
clean:
	rm -f add.o sub.o mul.o devl.o
在make之前
  [email protected]:~/yunfan/mf$ ls
  add.c  common.h  div.c  main.c  Makefile  mul.c  sub.c

在make之后  [email protected]:~/yunfan/mf$ make    gcc -c add.c    gcc -c sub.c    gcc -c div.c    gcc -c mul.c   ar rcs libyunfan.a add.o sub.o div.o mul.o

[email protected]:~/yunfan/mf$ lsadd.c  common.h  div.o        main.c    mul.c  sub.cadd.o  div.c     libyunfan.a  Makefile  mul.o  sub.o

[email protected]:~/yunfan/mf$ make cleanrm -f add.o sub.o div.o mul.o

[email protected]:~/yunfan/mf$ lsadd.c  common.h  div.c  libyunfan.a  main.c  Makefile  mul.c  sub.c

如果修改其中一个.c后,在执行make时,与此.c的所有文件都会重新编译。
时间: 2024-11-08 20:59:48

论Makefile的重要性(一)-----Linux C开发的相关文章

linux应用开发-makefile

linux应用开发-makefile 一 makefile 工程管理文件,编译成复杂的程序 组装程序 二 规则 1 文件名称:全部小写makefile或者首字母Makefile大写,其他的都不行 2 文件里面#代表注释 三 编写 makefile由许多条规则组成 规则:依赖项 (前面留一个tab)命令 hello:main.o 1.c 2.c gcc main.c 1.c 2.c -o hello 1 自定义变量:MOBJ= main.c相当于宏 test: $(MOBJ) 2 预定义变量:系统

嵌入式linux QT开发(四)——QT Creator工程管理

嵌入式linux QT开发(四)--QT Creator工程管理 一.QT Creator工程管理 QT Creator以工程项目的方式对源码进行管理,一个QT工程中包含不同类型的文件如下: A..pro项目描述文件 B..pro.user用户描述文件 C..h头文件 D..cpp源文件 E..ui界面描述文件 F.资源文件(图片.音频等) 二..pro项目描述文件 1..pro项目描述文件基本构成如下: A.#注释起始符 B.QT模块声明 C.TARGET可执行文件名 D.TEMPLATE程序

嵌入式Linux裸机开发(七)——UART串口通信

嵌入式Linux裸机开发(七)--UART串口通信 一.UART串口通信简介 通用异步收发器简称UART,即UNIVERSAL ASYNCHRONOUS RECEIVER AND TRANSMITTER, 它用来传输串行数据.发送数据时, CPU 将并行数据写入UART,UAR按照一定的格式在一根电线上串 行发出:接收数据时, UART检测另一根电线的信号,将串行收集在缓冲区中, CPU 即可读取 UART 获得这些数据. 在 S5PV210中, UART提供了 4 对独立的异步串口I/O端口,

如何使用eclipse进行嵌入式Linux的开发

如何使用eclipse进行嵌入式Linux的开发 作者:曾宏安,华清远见嵌入式学院高级讲师. 如何使用eclipse进行嵌入式Linux的开发 习惯了在windows环境下开发的程序员在转到Linux平台时经常会抱怨没有一个好用的集成开发环境.和windows下常用的一些开发软件相比,Linux自带的一些开发环境使用起来要么界面和操作不够方便.友好,要么功能不全.其实我们完全可以在开源社区上找到操作方便,功能强大的开发环境.下面就向大家介绍一个能在Linux上运行,界面和功能与windows上同

嵌入式linux QT开发(一)——QT简介

嵌入式linux QT开发(一)--QT简介 一.QT简介 1.QT简介 QT是一个跨平台的C++图形用户界面库,由挪威TrollTech公司出品,目前包括Qt Creator, QtEmbedded,Qt Designer快速开发工具,Qt Linguist国际化工具等部分,Qt支持所有Linux/Unix系统,还支持Windows平台. 2.QT优点 Qt是一个跨平台的C++图形用户界面应用程序框架,提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能.Qt很容易扩展,并且允许真正地组

Linux 驱动开发笔记(一)

1.查看printk函数日记输出 (1)使用字符终端:通常使用ctrl+alt+f1切换查看: (2)使用cat /proc/kmsg命令:(在Linux系统启动后,/proc/kmsg文件可以查看内核对外所用的符号表,可以用cat命令查看器内容.) (3)使用dmesg命令查看. linux/kernel.h文件定义的printk函数的Log Level: 常数定义语句 意义 #define KERN_EMERG "<0>"/*系统不运行*/ #define KERN_A

s3c6410 Linux 驱动开发环境搭建

s3c6410 Linux 驱动开发环境搭建 -- 既然你是做Linux开发的,你还用虚拟机? 非常多人都在win下做开发,于是SD_writer.exe之类的烧写工具"大行其道",多是用虚拟机Linux. 全然转到Linux下学习開始蛮不爽的,开发板制作商送的教程都是些讲Win-CE的东东,感觉实质性的东西没什么.对于全然用Linux做开发的技术解说非常少,连烧写SD卡都用的win以下的程序.后来找了些资料,整理在这里,希望留给有心人.共同营造一个更好的共同学习的环境. 当别人遇到困

嵌入式Linux裸机开发(一)——点亮Led

嵌入式Linux裸机开发(一)--点亮Led 开发板:友善之臂smart210 一.电路图查阅 1.底板电路图 查阅开发板底板电路图,查阅LED相关部分 LED电路工作原理: LED的正极接3.3V,负极接地时导通,LED发光. 开发板共有四颗LED,正极接3.3V,负极接开发板的LED1_LED4引脚,如果LED要点亮则需要输入低电平. 2.核心板电路图 查阅核心板电路图可知,LED1-LED4接在SoC的GPJ2_0-GPJ2_3,通过控制GPJ2_0-GPJ2_3的寄存器使对应GPIO引脚

使用eclipse在linux下开发C/C++

一直在Linux下开发,苦于没有IDE,一般都是自己编写Makefile,然后在windows下用文本编辑器ftp打开文件编辑,然后在linux下完成编译.调试代码也只能是命令行用gdb进行调试,相当痛苦. 现在推荐一个可行的方法:jre + eclipse + Xming + SecureCRT 或 Putty 1. 由于eclipse是基于java的,所以必须按照jre,可用下载:jre-8u5-linux-i586.rpm 2. 安装eclipse也很简单,直接到官网下载eclipse-c

linux下开发,解决cocos2d-x中编译出现的一个小问题, undefined reference to symbol &amp;#39;[email&#160;protected]@GLIBC_2.2.5&amp;#39;

解决cocos2d-x中编译出现的一个小问题 对于cocos2d-x 2.×中编译中,若头文件里引入了#include "cocos-ext.h",在进行C++编译的时候会遇到例如以下错误: undefined reference to symbol '[email protected]@GLIBC_2.2.5'/lib/x86_64-linux-gnu/libpthread.so.0: error adding symbols: DSO missing from command li