Makefile

转载 2016年06月01日 22:03:29
假设有很多.c以及.o文件的时候,我们就需要gcc后面跟一串.c文件等等,那么我们是否有很方便的命令来提高效率呢?
make工具就可以很清晰和快速的将文件进行整理,make内部使用了gcc。
首先我们检查一个我们是否安装了make工具(使用命令 make -v,若安装则显示安装信息,版本号码,若未安装,我们使用命令sudo apt-get install make)。
我们约定一个文件makefile来进行我们之前写过的文件进行配置。
makefile文件中可以写注释,以井号开头。
hello.out是我们的目标文件,但其中需要max.o,min.o,hello.c这三个文件,我们在makefile写下:
# this is make file。注意
hello.out:max.o min.o hello.c
gcc max.o min.o hello.c
# 同时我们写出max.o的文件来源
max.o:max.c
gcc -c max.c
min.o:min.c
gcc -c min.c
删除以o为后缀的文件:rm *.o
最上面的文件是我们最终需要的文件hello.out,同时它是由max.o,min.o,hello.c,同时我们再给出这三个文件锁依赖的文件(其实就是递归),找到各自的生成的源头文件。若最后我们没有在gcc中指定输出名称,则最后使用make命令(也就是直接命令make回车),就生成a.out文件,若要指定生成的文件名,我们就可以使用修改Makefile文件内的代码(改为gcc max.o min.o hello.c -o hello.out)。
此外,还需要注意的是,在Makefile文件中,我们gcc命令前需要有6个空格(即一个TAB键),若不是6个空格,则在使用make命令时,则会报错导致无法生成out文件等

Makefile中的?= := += =的区别

Makefile编写的时候会需要定义一些变量,这时候就需要用到“=”也就是C语言中的赋值符号来进行赋值,但有时候也会遇到":="和"?=",那么它们的区别是什么呢? 举个例子: 编写一个Makefil...
  • m7548352
  • m7548352
  • 2015年11月01日 22:18
  • 889

makefile中$0,$n,$*,$#等

makefile中参数: $0 这个程式的执行名字 $n 这个程式的第n个参数值,n=1..9 $* 这个程式的所有参数,此选项参数可超过9个。 $# 这个程式的参数个数 $$ 这个程式的PID(脚...
  • songhui1990
  • songhui1990
  • 2015年07月02日 20:09
  • 290

Linux下Makefile的编写及四个特殊符号的意义@、$@、$^、$<

我们先看三段C++程序: 一、line1的源码 line1.h #ifndef _LINE_1_H #define _LINE_1_H void line1_print(const char...
  • runfarther
  • runfarther
  • 2015年11月25日 14:47
  • 5601

Makefile中的$@, $^, $< , $?, $%, $+, $*

记性不好,多写博客   $@  表示目标文件 $^  表示所有的依赖文件 $ $?  表示比目标还要新的依赖文件列表...
  • Jeffrey0000
  • Jeffrey0000
  • 2013年10月08日 10:39
  • 6433

Makefile 的编写过程(实践)

本读不讲理论,只讲实践。 适用对象,有GCC基础,对GCC编译有了解的人群。   1、先了解程序从无到有的过程,即编译到执行。 (图片的引用来自互联网) 下面用实例来演示整个过程。 以...
  • fengsh998
  • fengsh998
  • 2012年11月10日 22:26
  • 3409

makefile 中 $@ $^ %< 使用

这篇文章介绍在LINUX下进行C语言编程所需要的基础知识。在这篇文章当中,我们将会学到以下内容: 源程序编译 Makefile的编写 程序库的链接 程序的调试 头文件和系...
  • kesaihao862
  • kesaihao862
  • 2012年03月08日 13:39
  • 87697

makefile '@' '$' '$$' '-' '-n ' 使用小结

makefile
  • kehyuanyu
  • kehyuanyu
  • 2014年03月18日 13:40
  • 1887

Makefile 中:= ?= += =的区别 和条件执行

一:在Makefile中经常看到obj-m    := scull.o和KERNELDIR ?= /lib/modules/等不同的赋值方式,现在总结他们的区别: = 是最基本的赋值 := 是覆盖...
  • u012851076
  • u012851076
  • 2014年10月16日 16:12
  • 1760

Linux下Makefile中动态链接库和静态链接库的生成与调用

背景:写这篇博客的原因是:最近在搞嵌入式,需要交叉编译opencv库文件,自己写Makefile,通过arm-linux-g++编译、链接、生成可执行文件,从而实现了移植的过程。平台是Toradex的...
  • u011964923
  • u011964923
  • 2017年06月15日 20:14
  • 4886

测试Makefile的 log输出语句

ifeq ("$(origin O)", "command line") OUT_DIR := $(O) $(shell echo "Makefile_log:var O is in the co...
  • ruanjianruanjianruan
  • ruanjianruanjianruan
  • 2016年06月20日 22:34
  • 1149
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Makefile
举报原因:
原因补充:

(最多只允许输入30个字)