Makefile 编写实例

make命令常用的三个选项:

1.-k:它的作用是让make命令在发现错误的时候仍然继续执行.我们可以利用这个选项在一次操作中发现未编译成功的源文件.

2.-n:它的作用是让make命令输出将要执行的操作步骤,而不是真正执行这些操作.

3.-f  <filename>:它的作用是告诉make命令将哪个文件作为makefile文件.如果未使用这个选项,make命令将依次查找当前目录下的makefile文件,Makefile文件.

Makefile文件中,将第一个目标定义为all,然后列出其他从属目标,这样可以明确地告诉make命令,在未指定特定目标的时候,默认情况下应该创建哪个目标.

 1 all: myapp
 2 #which compiler, 符号#表示注释.
 3 CC = gcc #定义一个宏,用$(CC)引用
 4 #Where to install
 5 INSTDIR = /usr/local/bin
 6 #Where are include files kept
 7 INCLUDE = .
 8 #Options for development
 9 CFLAGS = -g -Wall -ansi
10
11 myapp: main.o 2.o 3.o
12     $(CC) -o myapp main.o 2.o 3.o #必须以tab键开头,空格不行
13 main.o: main.c a.h
14     $(CC) -I$(INCLUDE) $(CFLAGS) -c main.c
15 2.o: 2.c a.h b.h c.h
16     $(CC) -I$(INCLUDE) $(CFLAGS) -c 2.c
17 3.o: 3.c a.h b.h c.h
18     $(CC) -I$(INCLUDE) $(CFLAGS) -c 3.c
19
20 clear:
21 #rm命令以-开头,含义是让make命令忽略rm命令执行的结果.
22     -rm main.0 2.o 3.o
23 install: myapp
24 #必须在每行后面添加反斜杠\,让所有这些shell脚本命令在逻辑上处于同一行.
25 #下面这个命令以@开头,表示make在执行这些规则之前不会在标准输出上显示命令本身.
26     @if [ -d $(INSTDIR) ]; 27         then 28         cp myapp $(INSTDIR); 29         chomd a+x $(INSTDIR)/myapp; 30         chomd og-w $(INSTDIR)/myapp; 31         echo "Installed in $(INSTDIR)"; 32     else 33         echo "Sorry, $(INSTDIR) does not exit"; 34     fi下面三个命令:makemake clearmake install
时间: 2024-08-04 21:19:55

Makefile 编写实例的相关文章

makefile 编写要点

#PS:请尊重原创,不喜勿喷 #PS:要转载请注明出处,本人版权所有 #PS:这个只是  <  我自己    >理解,如果和你的原则相冲突,请 谅解,勿喷 最近整理自己的文件时,发现由于太懒的原因,很多资料都来不及整理就忘掉了,很可惜,所以,在整理Makefile时,就把自己作为新手,编写makefile的一些疑问立即写下来. 1 变量赋值 varname= 是最基本的赋值 varname:= 是覆盖之前的值 varname?= 是如果没有被赋值过就赋予等号后面的值 varname+= 是添加

linux 下C语言编程库文件处理与Makefile编写

做开发快3年了,在linux下编译安装软件算是家常便饭了.就拿gcc来说,都有不下10次了,可基本每次都会碰到些奇奇怪怪的问题.看来还是像vs.codeblocks这样的ide把人弄蠢了.便下定决心一定要好好学习下如何在linux下纯手工gcc编译c项目.今天学了2点,一个是库文件处理,另一个是makefile编写. 学习的系统是centos6.6,编译升级的gcc4.8.2,明天写个博客总结下这回gcc安装的过程,每次都能学到些东西. gcc的编译过程 首先需要清楚gcc编译做了些什么 源文件

单目录下多文件 makefile编写

makefile很久就接触过了,但是一直没怎么深入的去学习和总结:在项目中我也只是看看makefile或者修改部分语句,全部自己动手写的话还真没有:知识在于沉淀,这句说的非常好,所以现在把自己理解的东西,记录下来,以便后面查阅: 这篇blog要分享的是在单目录下多文件的makefile编写,首先说明当前目录下有多少文件:fun.h   fun.c  main.c  makefile:其中*.c 文件都要依赖 *.h文件: 首先常规编译: 预处理期:gcc  -E  -o fun.i  fun.c

makefile编写---:= ?= += =的区别

在Makefile中我们经常看到 = := ?= +=这几个赋值运算符,那么他们有什么区别呢?我们来做个简单的实验 新建一个Makefile,内容为:ifdef DEFINE_VRE    VRE = “Hello World!”elseendif ifeq ($(OPT),define)    VRE ?= “Hello World! First!”endif ifeq ($(OPT),add)    VRE += “Kelly!”endif ifeq ($(OPT),recover)   

GNU Makefile编写

[Introduction] make 是程序员很好用的工具,如果存在makefile存在,每次更新代码,执行shell命令 shell 就可以执行所有需要编译的文件,make是根据你编写的Makefile文件和源程序的最后的修改时间来决定哪些文件需要更新重编的. [Introduction to Makefiles] 问题的关键是如何编写一个Makefile文件,我们都是通过Makefile 来告诉make工具怎么去做.一个简单的makefile的规则如下: target ... : prer

makefile编写---.a静态库的生成和调用

#.SUFFIXES: .c .o Cc =gcc #OSA=/data/users/osa IncDir=-I. -I./ Debug = -g Cflags = -c $(DEBUG) Libs = -lpthread Lib_Dir=./#/data/users/osa/api/ #PKIOBJ=PKITool.o kdmd5.o Lib=alg.aPkiObj=alg.o .c.o: $(Cc) $(Cflags) $(IncDir) $*.c all: PKITool #clean P

一个项目的Makefile编写及调试

在src目录下包含很多文件夹,那么需要遍历所有的目录执行Makefile,那么给一个在src目录下的Makefile. # 需要排除的目录 exclude_dirs := include bin # 取得当前子目录深度为1的所有目录名称 DIRS := $(shell find . -maxdepth 1 -type d) DIRS := $(basename $(patsubst ./%,%,$(DIRS))) DIRS := $(filter-out $(exclude_dirs),$(DI

内核Makefile编写

对于大部分内核模块或设备驱动的开发者和使用者来说,最常接触到的就是各层目录下基于kbuild架构的kbuild Makefile文件.主要部分有:1.目标定义,目标定义就是用来定义哪些内容要做为模块编译,哪些要编译链接进内核. 最简单的只有一行,如obj-y += foo.o表示要由foo.c或者foo.s文件编译得到foo.o并链接进内核,而obj-m则表示该文件要作为模块编译.除了y,m以外的obj-x形式的目标都不会被编译. 由于既可以编译成模块,也可以编译进内核,更常见的做法是根据.co

小型C/C++项目的makefile编写

[前言]在我所接触到的Linux嵌入式开发中,大多使用的是C语言,采用makefile文件对源文件进行编译后生成可执行文件.本文即从个人经历上介绍小型的C项目如何编写makefile文档. 一.gcc命令 从目的上看,gcc命令和makefile的功能是一样,即是把源文件编译后生成可执行文件或.o二进制文件.gcc命令中有许多的额外的参数,本文仅介绍以下几种最简单和常用的方法: 有helloworld.c文件如下: #include <stdio.h> int main() { printf(