实验表示测试出来的结论,没有代码理论依据 Makefile中,目标对应的命令结束标记是什么呢?换句话说,Make中怎么判断目标的最后一条命令? 例如常见的目标编写如下: test1: echo "test1" echo "test without empty line" 那如果目标下空一行呢? test2: echo "test2" echo "test with emtpy line" 如果目标命令还掺杂了ifeq,defi…
第3课 - makefile伪目标的引入 1. makefile 中的目标究竟是什么? (1)默认情况下,make 认为目标对应着一个文件  ==>  目标即文件名 (2)make 首先会检测目标对应的文件是否存在,若不存在则执行依赖和命令.若存在则会比较目标文件和依赖文件的新旧关系,决定是否执行命令.   在 make 中,通过比较目标文件和依赖文件的时间戳,来判断两者的新旧关系.make 程序使用的时间戳的类型是 mtime(modify time),即文件发生修改的时间.   在 linu…
Makefile包含 目标文件.依赖文件.可运行命令三部分. 每部分的基本格式例如以下: test: prog.o  code.o gcc  -o  test   prog.o   code.o 当中,第一行的test是目标文件. prog.o.code.o是依赖文件: 第二行的gcc -o test prog.o code.o是可运行命令. 整个Makefile文件都是这样的格式. 参考链接: https://blog.csdn.net/haoel/article/details/2886 M…
/********************************************************************** * make命令回显Makefile执行脚本命令 * 说明: * 当我们拿到别人的源代码的时候,如果是用Makefile组织的,同时希望能够 * 跟踪一下源代码的编译架构,从而建立对源代码的组织架构的全局理解,可以通 * 过传入V=1打开执行回显功能,当然要源代码的Makefile支持这个功能. * * 2018-6-29 深圳 宝安西乡 曾剑锋 ***…
(一) rebuild build clean的实现 新知识点: 当一个目标的依赖是一个伪目标时,这个伪目标的规则一定会被执行. 贴实验代码 CC := gcc Target := helloworld.out $(Target) : func.o main.o $(CC) -o $(Target) main.o func.o main.o : main.c $(CC) -c main.c -o main.o func.o : func.c $(CC) -c func.c -o func.o .…
target: echo "hello_Makefile" .PHONY: clean clean: echo "clean Done .2019" 使用伪目标的优势解读: 如果不使用伪目标,且本地存在名为"clean"文件名的文件,那么将不能执行clean目标下的命令. 1.   make的基本原则:A make软件认为目标总是对应文件的.    B 如果一个目标对应的依赖为空,将被视无需检查任何依赖是否更新. 如果此时不存在该目标同名的文件,…
代码简单,但测试花样多,若能回答对本博客的每个步骤的预期结果,可以说对makefile的基础掌握是扎实的. 一,当前的makefile代码 root@ubuntu:~/Makefile_Test# root@ubuntu:~/Makefile_Test# root@ubuntu:~/Makefile_Test# cat My_Make Target := Hello.out $(Target) : @echo "Target" test.out : $(Target) @echo &q…
https://www.zybuluo.com/lishuhuakai/note/210174 本节我们讨论一个Makefile中的一个重要的特殊目标:伪目标. 伪目标是这样一个目标:它不代表一个真正的文件名,在执行make时可以指定这个目标来执行其所在规则定义的命令,有时我们也可以将一个伪目标称为标签.使用伪目标有两点原因: 避免在我们的Makefile中定义的只执行命令的的目标(此目标的目的为了执行执行一系列命令,而不需要创建这个目标)和工作目录下的实际文件出现名字冲突. 提高执行make时…
<一>编译本地的源文件 + 变量的模式替换    实验代码 root@ubuntu:~/Makefile_Test/5make_test# vim makefile target := target.out CC := gcc src := $(wildcard *.c) #使用maefile的预定义函数来获取本地的后缀为C的源文件 o_files := $(src:%.c=%.o) #这是(变量的高级主题之)变量的模式替换 $(o_files):$(src) #将源代码进行汇编,生成汇编文件…
实验原理: 开发板上自带一片CH340芯片,完成本实验电脑需要安装CH340驱动, CH340的TXD连接STM32的GPIO(PXC7),CH340的RXD连接STM32的 GPIO(PC6),通过串口发送命令控制LED的亮灭.串口命令如下: LED_RED_ON\CR\LF---------------------LED红灯亮LED_RED_OFF\CR\LF-------------------LED红灯灭 LED_BLUE_ON\CR\LF-------------------LED蓝灯…
实验原理: 开发板上自带一片CH340芯片,完成本实验电脑需要安装CH340驱动, CH340的TXD连接STM32的GPIO(PB6),CH340的RXD连接STM32的 GPIO(PB7),通过串口发送命令控制LED的亮灭.串口命令如下: LED_RED_ON\CR\LF---------------------LED红灯亮 LED_RED_OFF\CR\LF-------------------LED红灯灭 LED_BLUE_ON\CR\LF-------------------LED蓝灯…
makefile代码: .PHONY : rebuild clean $(TARGET) #声明伪目标时,除直接使用目标名外, 也可以使用 $(变量) 这是取变量的值 CC := g++ TARGET := hello-makefile.out OBJS := func.o main.o $(TARGET) : $(OBJS) $(CC) -o $@ $^ $(OBJS) : %.o : %.c $(CC) -o $@ -c $^ clean : $(RM) $(OBJS) $(RM) $(TA…
实验指导书及代码包下载: http://pan.baidu.com/s/1pJxluWF iCore3 购买链接: https://item.taobao.com/item.htm?id=524229438677…
#include<stdio.h>#include<stdlib.h>#include<string.h>#define N 30main(){ char str[N]; int i,j; char cmd[N][N] = {"dir","cd","md","rd","cls","date","time","ren&quo…
Makefile的工作流程 http://c.biancheng.net/view/7091.html Makefile文件是什么? 我们教程主要是讲的是 Makefile .很多 Linux(Unix) 做开发的初学者不了解 Makefile 是什么,甚至大部分 Windows 开发工程师对 Makefile 都特别陌生.这个其实很正常,如果你是在 Windows 下作开发的话不需要去考虑这个问题,因为 Windows 下的集成开发环境(IDE)已经内置了 Makefile,或者说会自动生成…
规则语法 通常规则的语法格式如下: TARGETS : PREREQUISITES COMMAND ... 或者: TARGETS : PREREQUISITES ; COMMAND COMMAND ... 规则中" TARGETS"可以是空格分开的多个文件名,也可以是一个标签(例如:执行清空的" clean")." TARGETS"的文件名可以使用通配符,格式" A(M)"表示档案文件( Linux下的静态库.a文件)的成员…
书写命令———— 每 条规则中的命令和操作系统Shell的命令行是一致的.make会一按顺序一条一条的执行命令,每条命令的开头必须以[Tab]键开头,除非,命令是紧跟 在依赖规则后面的分号后的.在命令行之间中的空格或是空行会被忽略,但是如果该空格或空行是以Tab键开头的,那么make会认为其是一个空命令. 我们在UNIX下可能会使用不同的Shell,但是make的命令默认是被“/bin/sh”——UNIX的标准Shell解释执行的.除非你特别指定一个其它的Shell.Makefile中,“#”是…
很详细.很移动的Linux makefile 教程 内容如下: Makefile 介绍 Makefile 总述 书写规则 书写命令 使用变量 使用条件推断 使用函数 make 的运行 隐含规则 使用make更新函数库文件 后序 近期在学习Linux下的C编程,买了一本叫<Linux环境下的C编程指南>读到makefile就越看越迷糊,可能是我的理解能不行. 于是google到了以下这篇文章.通俗易懂.然后把它贴出来,方便学习. 后记,看完发现这篇文章和<Linux环境下的C编程指南>…
1.Makefile伪目标的格式: .PHONY : cleanclean: rm xxxx 2.Makefile伪目标的作用: 第一种情况: 如果我们需要书写这样的一个规则:规则所定义的命令不是去创建目标文件,而是通过make命令行明确指定它来执行一些特点的命令,就像例题中的clean.当文件夹中没有clean这个文件的时候,我们输入“make clean”能按照初衷执行,但是一旦文件夹中出现clean文件,我们再次输入“make clean”,由于这个规则没有任何依赖文件,所以目标被认为是最…
每条规则中的命令和操作系统 Shell 的命令行是一致的. make 会一按顺序一条一条的执行命令,每条命令的开头必须以[Tab]键开头,除非,命令是紧跟在依赖规则后面的分号后的. 在命令行之间中的空格或是空行会被忽略,但是如果该空格或空行是以 Tab 键开头的,那么make 会认为其是一个空命令. 我们在 UNIX 下可能会使用不同的 Shell,但是 make 的命令默认是被"/bin/sh"--UNIX的标准 Shell 解释执行的.除非你特别指定一个其它的 Shell. Mak…
1.关于程序的编译和链接 一般来说,无论是C.C++首先要把源文件编译成中间目标文件即 Object File(windows为.obj文件,unix为.o文件),这个动作叫做编译(compile).然后再把大量的Object File合成执行文件,这个动作叫作链接(link). 1.1编译 编译时编译器只检查语法是否正确,函数与变量的声明是否正确.如果函数未被声明,编译器会给出一个警告,但可以生成Object File.一般来说,每个源文件都应该对应于一个中间目标文件(O文件或是OBJ文件).…
我们来思考一下makefile中的目标究竟是什么?实际上,在默认情况下:    1.make将makefile的目标认为是一个文件:    2.make解释器比较目标文件和依赖文件的新旧关系,决定是否执行命令:    3.make以文件作为第一优先级. 如果不进行特殊的makefile控制,make解释器在解析makefile文件时,在解析到一个规则时,会将这个规则中的目标认为是一个文件,并进一步判断目标文件和依赖文件的新旧关系.     编写以下的makefile文件,并执行make clea…
本文并不是Makefile的教程,仅是本人学习时的感悟. Makefile的基本格式 目标:依赖文件(or 目标) [tab]命令 目标: 是要生成的或操作的命令的索引 依赖: 是生成目标依赖的文件或目标 命令: 是为了生成目标需要执行的shell语句 任意一个依赖文件被改动,将导致已存在的目标文件过期,简单来说,依赖的作用就是决定目标是否过期,是否需要重新编译. 举个例子, #include <stdio.h> #include "mylib1.h" #include &…
一.显示命令 echo “@”字符可以控制命令是否在屏幕上显示,如 @echo 正在编译XXX模块......  输出: 正在编译XXX模块...... 如果没有“@"则输出 : echo 正在编译XXX模块...... 正在编译XXX模块...... 二.make参数 下面列举了所有GNU make 3.80版的参数定义. 1)make  “-n”或“--just-print” ——只显示命令,但不会执行命令. make  “-s”或“--slient” ——全面禁止命令的显示. 2)make…
该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神博客:(最原始版本) http://blog.csdn.net/haoel/article/details/2886 我转自一个博主,基于原博客的整理版本: https://blog.csdn.net/seven_amber/article/details/70216216 4 Makefile 书写命令 每条规则中的命令和操作系统Shell的命令行是一致的.make会一按顺序一条一条的执行命令,每条命令的开头必须以[T…
makefile简介 makefile可实现工程的自动化编译,只需一个make命令即可一键完成.makefile定义了一些规则,指定哪些文件需要先编译.后编译.重新编译等. 一般的C或者C++程序,都需要先编译成中间文件,windows下为.obj文件,UNIX下为.o文件,这个过程称为编译(compile). 每个原文件都应该对应一个中间文件(.obj文件或者.o文件),把大量的中间文件合成执行文件的过程,称为链接(Link):链接时,主要是链接函数和变量,即可以使用.obj文件或者.o文件链…
举例:通过Makefile调用pkg-config命令. pkg-config - Return metainformation about installed libraries (为了使用lib库,通过pkg-config生成必要的编译options) Makefile中的例: CFLAGS = `pkg-config --cflags gtk+-2.0` LDFLAGS = `pkg-config --libs-only-L gtk+-2.0` LIBS = `pkg-config --l…
相关学习资料 http://gcc.gnu.org/ https://gcc.gnu.org/onlinedocs/ http://zh.wikipedia.org/zh/GCC http://blog.csdn.net/casularm/article/details/316149 http://www.bccn.net/Article/kfyy/cyy/jc/200409/9.html http://linux.chinaunix.net/techdoc/develop/2008/12/16…
目录 一.概述 1.本文的意义 2.Linux内核Makefile文件组成 二.Linux内核Makefile的“make解析”过程 1 顶层Makefile阶段 1.从总目标uImage说起 2.vmlinux的生成 3.vmlinux-lds.vmlinux-init.vmlinux-main的生成 2 scripts/Makefile.build的第一次调用阶段 1.Makefile.build的包含文件 2.scripts/Makefile.build的总目标 3.drivers/bui…
编程通常遵循一个相当简单的程序:编辑源文件,编译源代码成可执行的格式,调试结果.尽管将源代码翻译成可执行程序是常规的过程,如果做的不正确,程序员可能会浪费大量的时间去追踪问题.大多数的开发者都经历过这样的挫折:修改一个函数并运行新代码却发现他们的修改并没有修正bug.后来他们发现他们再也不能执行这个修改过的函数,由于一些程序的错误,如未能重新编译源代码.未能重新链接成可执行文件.未能重建成一个jar包.由于不同版本程序的开发,或由于其他平台和支撑库的其他版本,随着程序复杂性的增加,这些寻常的工作…