Makefile — 基础】的更多相关文章

首先写一个自己的库: #include "../MyAPI.h" #include <cstdlib> #include <ctime> int getRandom(int boundary) { if (boundary <= 0 ) { return 0; } srand((unsigned)time(NULL)); return rand() % boundary; } 这里的MyAPI.h是库对应的头文件(这里用../MyAPI.h是因为库文件源代…
Makefile基础学习 理论知识 makefile关系到了整个工程的编译规则.一个工程中的源文件不计其数,并且按类型.功能.模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个 Shell脚本一样,其中也可以执行操作系统的命令. makefile带来的好处就是--"自动化编译",一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开…
第一章:C语言之Makefile基础(一) 第二章:C语言之Makefile基础(二) 再来看一个简单的例子: [root@localhost linux_c]# cat Makefile foo = $(bar) bar = Huh? all: @echo $(foo) [root@localhost linux_c]# make Huh? 我们看到了,bar的值后于foo定义,但执行make的时候仍然打印出Huh?.这说明当make读到foo=$(bar)时,确定foo的值是$(bar),但…
上一章:C语言之Makefile基础(一) 上一章的Makefile写的中规中矩,比较繁琐,是为了讲清楚基本概念,其实Makefile有很多灵活的写法,可以写的更简洁,同时减少出错的可能 一个目标依赖的所有条件不一定非得写在一个规则中,也可以拆开来写,例如: main.o: main.h stack.h maze.h main.o: main.c gcc -c main.c 就相当于: main.o: main.c main.h stack.h maze.h gcc -c main.c 如果一个…
文首感谢http://www.chinaunix.net 作者:gunguymadman的分享 makefile关系到了整个工程的编译规则.一个工程中的源文件不计数,其按类型.功能.模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令. 1.程序的编译和链接一般来说,无论是C.C++.还是pas(pascal语言),…
一.Makefile里有什么? Makefile里主要包含了五个东西:显式规则.隐晦规则.变量定义.文件指示和注释. 1.显式规则.显式规则说明了,如何生成一个或多的的目标文件.这是由Makefile的书写者明显指出,要生成的文件,文件的依赖文件,生成的命令. 2.隐晦规则.由于我们的make有自动推导的功能,所以隐晦的规则可以让我们比较粗糙地简略地书写Makefile,这是由make所支持的. 3.变量的定义.在Makefile中我们要定义一系列的变量,变量一般都是字符串,这个有点你C语言中的…
该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神博客:(最原始版本) http://blog.csdn.net/haoel/article/details/2886 我转自一个博主,基于原博客的整理版本: https://blog.csdn.net/seven_amber/article/details/70216216 使用变量 在 Makefile中的定义的变量,就像是C/C++语言中的宏一样,他代表了一个文本字串,在Makefile中执行的时候其会自动原模原样地…
该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神博客:(最原始版本) http://blog.csdn.net/haoel/article/details/2886 我转自一个博主,基于原博客的整理版本: https://blog.csdn.net/seven_amber/article/details/70216216 4 Makefile 书写命令 每条规则中的命令和操作系统Shell的命令行是一致的.make会一按顺序一条一条的执行命令,每条命令的开头必须以[T…
该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神博客:(最原始版本) http://blog.csdn.net/haoel/article/details/2886 我转自一个博主,基于原博客的整理版本: https://blog.csdn.net/seven_amber/article/details/70216216 2 Makefile 总述 2.1 Makefile里有什么? Makefile里主要包含了五个东西:显式规则.隐晦规则.变量定义.文件指示和注释.…
该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神博客:(最原始版本) http://blog.csdn.net/haoel/article/details/2886 我转自一个博主,基于原博客的整理版本: https://blog.csdn.net/seven_amber/article/details/70216216 makefile很重要 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但…
makefile的核心 targets : prerequisites ; commands...   //不分行的情况 targets : prerequisites                        //分行的情况 commands targets : target模式 : prereq模式 ; commands  //静态模式  不分行的情况 targets : target模式 : prereq模式                     //静态模式  分行的情况 comm…
一.makefile简介 定义:makefile定义了软件开发过程中,项目工程编译链.接接的方法和规则. 产生:由IDE自动生成或者开发者手动书写. 作用:Unix(MAC OS.Solars)和Linux(Red Hat.Ubuntu)系统下由make命令调用当前目录下的makefile文件执行,可实现项目工程的自动化编译. 二.语法规则 target:prerequisites command 其中,target为需要生成的目标,prerequisites为依赖项,command为make需…
1.规则 规则定义格式如下 目标 : 条件1 条件2 ... 命令1 命令2 ... 隐含规则和模式规则(略) 2.变量 Makefile变量像C的宏定义一样,代表一串字符,在取值的地方展开. 1)两种定义方式 用'='定义的变量会延迟展开,即在真正需要取值的时候才会展开:用':='定义的变量则是在变量定义时立即展开. 2)'?='运算符 '?='是赋值运算符,例如foo ?= $(bar)的意思是:如果foo没有定义过,那么?=相当于=,定义foo的值是$(bar),但不立即展开:如果先前已经…
除了Hello World这种极简单的程序之外,一般的程序都是由多个源文件编译链接而成的,这些源文件的处理步骤通常用Makefile来管理.makefile带来的好处就是--"自动化编译",一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率.make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令 C语言首先要把源文件编译成中间代码文件,在Windows下也就是 .obj 文件,UNIX下是 .o 文件,即…
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在编译一个大型项目的时候,往往有很多目标文件.库文件.头文件以及最终的可执行文件.不同的文件之间存在依赖关系(dependency).比如当我们使用下面命令编译时: $gcc -c -o test.o test.c $gcc -o helloworld test.o 可执行文件helloworld依赖于test.o进行编译的,而test.o依赖于test.c. 依赖关系 在我们编…
参考: 跟我一起写 Makefile GNU make <GNU+Make项目管理(第三版)> 1.Makefile用途 使用GNU Make工具来管理程序是每个Linux工程师必须掌握的技能.Make能够使整个程序的编译.链接只需要一个命令(make)就可以完成. Make的工作主要依赖于一个叫为Makefile的文件.Makefile文件描述了整个程序的编译,连接等规则.其中包括:工程中的哪些源文件需要编译以及如何编译,如何最后产生我们想要得可执行文件. 2.Makefile构成 2.1…
$@    目标文件名 $< 第一个依赖文件名 $^ 规则所有依赖文件列表 如果不想让执行语句被打印出来,就在语句前面加上@符号 模式规则 %.o:%.c 后缀规则 .c.o 生成单进程的Makefile PHONY:clean OBJECTS = main.o add.o sub.oCFLAGS = -Wall -gCC = gcc app:$(OBJECTS) $(CC) $(CFLAGS) $^ -o $@ %.o:%.c$(CC) $(CFLAGS) -c $< -o $@ clean…
在大型的C语言项目中,一般都是由多个源文件编译链接形成的可执行程序,而这些源文件的处理步骤,通常交给Makefile来管理,Makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 MMakefile就像一个Shell脚本一样,其中也可以执行操作系统的命令. 我们先来看几个源文件: main.c文件: #include <stdio.h> #include "main.h" #include &…
该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神博客:(最原始版本) http://blog.csdn.net/haoel/article/details/2886 我转自一个博主,基于原博客的整理版本: https://blog.csdn.net/seven_amber/article/details/70216216 使用条件判断 使用条件判断,可以让make根据运行时的不同情况选择不同的执行分支.条件表达式可以是比较变量的值,或是比较变量和常量的值. 一.示例下…
该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神博客:(最原始版本) http://blog.csdn.net/haoel/article/details/2886 我转自一个博主,基于原博客的整理版本: https://blog.csdn.net/seven_amber/article/details/70216216 使用make更新函数库文件 ——————————— 函数库文件也就是对Object文件(程序编译的中间文件)的打包文件.在Unix下,一般是由命令"…
该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神博客:(最原始版本) http://blog.csdn.net/haoel/article/details/2886 我转自一个博主,基于原博客的整理版本: https://blog.csdn.net/seven_amber/article/details/70216216 后序 —— 终于到写结束语的时候了,以上基本上就是GNU make的Makefile的所有细节了.其它的产商的make基本上也就是这样的,无论什么样…
该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神博客:(最原始版本) http://blog.csdn.net/haoel/article/details/2886 我转自一个博主,基于原博客的整理版本: https://blog.csdn.net/seven_amber/article/details/70216216 隐含规则 在我们使用Makefile时,有一些我们会经常使用,而且使用频率非常高的东西,比如,我们编译C/C++的源程序为中间目标文件(Unix下是…
该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神博客:(最原始版本) http://blog.csdn.net/haoel/article/details/2886 我转自一个博主,基于原博客的整理版本: https://blog.csdn.net/seven_amber/article/details/70216216 make 的运行 一般来说,最简单的就是直接在命令行下输入make命令,make命令会找当前目录的makefile来执行,一切都是自动的.但也有时你…
该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神博客:(最原始版本) http://blog.csdn.net/haoel/article/details/2886 我转自一个博主,基于原博客的整理版本: https://blog.csdn.net/seven_amber/article/details/70216216 3 Makefile书写规则 规则包含两个部分,一个是依赖关系,一个是生成目标的方法. 在Makefile中,规则的顺序是很重要的,因为,Makef…
一.自动处理头文件的依赖关系 在Makefile中插入如下代码: include $(sources:.c=.d) %.d: %.c set -e; rm -f $@; \ $(CC) -MM $(CPPFLAGS) $< > $@.$$$$; \ sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \ rm -f $@.$$$$…
Makefile的作用 如果没有Makefile,每次修改源代码后,如果要重新编译代码,都要输入编译命令,当源代码很多时,效率很底下. 基本格式 target: componsnts TAB rule main: main.o mytool1.o mytool2.o gcc -o main main.o mytool1.o mytool2.o Makefile规则 Makefile由一系列规则组成,规则的结构如下 目标文件 :依赖文件 命令1 命令2 ... 命令n 三个有用的变量 $@ 目标文…
1.. specify the directores , i not specified , search current directory put every folder into a listSRCDIRS := ifeq ($(SRCDIRS),)SRCDIRS := $(shell find $(SRCDIRS) -type d) 2.. addprefix:作用是给每个string添加前缀,string之间用空格隔开.$(addprefix prefixstr, string1 s…
http://blog.csdn.net/ghostyu/article/details/6866863 在我前一篇写的[ linux驱动学习(一)Makefile基础]中,Makefile写的中规中矩,其实Makefile写法很灵活,可以写得很简洁,而且减少出错的可能,现在就把之前写的Makefile改进一下. main: main.o hello.o word.o gcc main.o hello.o word.o -o main main.o:main.h hello.h word.h h…
本周成胖子每周一博到了第四周^_^ 前言 主Makefile结构 顶层 第二层 尾记 前言 前一篇,我们大概描述了整个镜像文件的生成过程.本周我们来解析主Makefile,看看主要编译过程是怎么产生的. 主Makefile结构 我们以chaos calmer的代码为例,整个编译的入口是在源码根目录下的Makefile.编译的各种命令都应该在源码根目录下键入. 整个主Makefile的结构如下: world: ifneq ($(OPENWRT_BUILD),1) 顶层 else 第二层 endif…
//test.c: #include <stdio.h> int main(void) { printf("hello world!"); return 0; } ====================================== 一. 1. 编译过程:预处理(processing)->编译(compilation)->汇编(assembly)->Linking 2. 预处理: gcc -E test.c -o test.i / gcc -E t…