Linux Makefile学习

编译环境GNU Make 4.1

# 变量声明方式,会在需要展开时进行展开
# 貌似变量前面后面加空格是没关系的
OBJECTS=   main.o test1.o test3.o
# 无论执行make或是make clean,打印出的TESTVAL值都是2
# 所以变量重新赋值会可能产生一些意想不到的问题
TESTVAL=1

.PHONY:out
# 第一个目标名为默认最终目标名
#out:main.o test1.o test3.o
# 等价语句
out1:$(OBJECTS)
	#gcc -o out main.o test1.o test3.o
	# 等价语句
	#gcc -o out $(OBJECTS)
	# 等价语句
	# [email protected]代表所有输出
	gcc -o [email protected] $(OBJECTS)
	# 等价语句
	# $^代表所有输入
	#gcc -o [email protected] $^
	@# 在执行过程中会显示每一句话,如果不想显示则加@
	@echo $(TESTVAL)

main.o:main.c test1.h test3.h
	gcc -c main.c

test1.o:test1.c test1.h test2.h
	gcc -c test1.c
	# 如果test1.c编译错误,即便有touch,test1.o和test3.o都不会出现,在gcc -c test1.c前面加“-”号才可以实现继续make
	#touch test1.o 

test3.o:test3.c test3.h test4.h
	gcc -c test3.c

# %.o代表所有在匹配的.o输出文件
# %.c代表.o相应名称的.c
# 如果除了main.o、test1.o、test2.o还有其他.o文件需要匹配,则使用此条规则
%.o:%.c
	gcc -c $^
	# 等价语句
	# $<代表第一个输入参数
	#gcc -c $<

# 无论执行make或是make clean,打印出的TESTVAL值都是2
# 所以变量重新赋值会可能产生一些意想不到的问题
TESTVAL=2

# wildcard代表通配符展开,如果“OBJS=*.o”就不对了
# 如果变量后面加注释如下,则变量后面多了一个空格,在某些场合会出错
# OBJS=$(wildcard *.o) #
# .PHONY:代表无视依赖性,每次都执行,用在clean上是为了防止有文件名称为clean
.PHONY:clean
clean:
	rm -f main.o test1.o test3.o out
	@echo $(TESTVAL)
	# 等价语句
	#rm -f $(OBJS) out
	# 等价语句
	# 此处要加“-”号,否则第一步没执行完第二步就不执行了
	#-rm -f main.o test1.o
	#-rm -f test3.o out
	# 等价语句
	#rm -f *.o out

还有很多高级技巧,待续~

参考文献:跟我一起写Makefile 陈皓

http://blog.csdn.net/haoel/article/details/2886/

http://blog.csdn.net/haoel/article/details/2887/

http://blog.csdn.net/haoel/article/details/2888/

http://blog.csdn.net/haoel/article/details/2889/

http://blog.csdn.net/haoel/article/details/2890/

http://blog.csdn.net/haoel/article/details/2891/

http://blog.csdn.net/haoel/article/details/2892/

http://blog.csdn.net/haoel/article/details/2893/

http://blog.csdn.net/haoel/article/details/2894/

http://blog.csdn.net/haoel/article/details/2895/

http://blog.csdn.net/haoel/article/details/2896/

http://blog.csdn.net/haoel/article/details/2897/

http://blog.csdn.net/haoel/article/details/2898/

http://blog.csdn.net/haoel/article/details/2899/

时间: 2024-10-12 19:01:32

Linux Makefile学习的相关文章

【Linux学习】Makefile学习(二)

FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 40975    Accepted Submission(s): 13563 Problem Description FatMouse prepared M pounds of cat food, ready to trade with the cats g

Linux 程序设计学习笔记----动手编写makefile文件

Befroe Beginning. 之前定了暑假的plan ,关于Linux的书籍现在在看的是ALP和Linux高级程序设计(杨宗德)第三版.在计划中的是Linux高级环境编程. 现在开始关于Linux程序设计的第一篇学习笔记. 本来打算把名字写成教程,不过觉得自己完全是新手在自学,还是写学习笔记比较负责和适合. 希望可以一起学习进步. 引入 首先我们假设这样一个场景.我们有一个程序包含了三个文件,分别是源码文件main_plus,c和function_plus.c以及头文件mydefine_p

Linux 我的第一个makefile(Linux指令学习笔记)

我的第一个makefile 最近学到了makefile的文件的编写.makefile是一个能达到方便编译链接生成目标程序的文件, make确实很方便,在写makefile的过程也能更好的理解gcc编译器执行生成可执行文件的全过程.这里是我 的第一个makefile的编写. makefile根据依赖,逐步解析生成目标文件. 首先指定all:ef  生成最终目标文件ef 生成ef的前提是依赖ef:total.o sum.o mul.o 依赖三个目标文件. 所以我们要另外指定gcc的执行 gcc -o

Linux makefile 教程 很具体,且易懂

近期在学习Linux下的C编程,买了一本叫<Linux环境下的C编程指南>读到makefile就越看越迷糊,可能是我的理解能不行. 于是google到了下面这篇文章.通俗易懂.然后把它贴出来,方便学习. 后记,看完发现这篇文章和<Linux环境下的C编程指南>的makefile一章所讲述的惊人的类似,仅仅是这篇文章从一个实例切入,在有些地方比較好理解.能让人看懂就是好文章. 跟我一起写 Makefile陈皓 (CSDN)概述--什么是makefile?也许非常多Winodws的程序

Linux C++学习之路(转自网络)

Module01 - Linux系统基础 由于本系列课程基于Linux(或UNIX),熟悉Linux操作系统是必要的前提. 该模块的课程包含以下方面的内容: 常用Unix/Linux命令    熟悉文件管理.文本处理.进程管理.网络.系统管理等各个方面大约100个常用的命令.    深入了解bash    了解Linux默认shell: bash 的语法.命令执行.I/O重定向.任务控制等.    正则表达式基础    由于UNIX/Linux中很多强大的文本处理命令如:grep.awk.sed

Linux内核学习--写一个c程序,并在内核中编译,运行

20140506 今天开始学习伟大的开源代表作:Linux内核.之前的工作流于几个简单命令的应用,因着对Android操作系统的情愫,"忍不住"跟随陈利君老师的步伐,开启OS内核之旅.学习路径之一是直接从代码入手,下面来写一个hello.c内核模块. 说明: 这个路径/usr/src/linux-headers-2.6.32-22/include/linux是引用的头文件. 内核模块固定格式:module_init()/ module_exit(),module函数是从头文件中来的.

很详细、很移动的Linux makefile教程:介绍,总述,书写规则,书写命令,使用变量,使用条件推断,使用函数,Make 的运行,隐含规则 使用make更新函数库文件 后序

很详细.很移动的Linux makefile 教程 内容如下: Makefile 介绍 Makefile 总述 书写规则 书写命令 使用变量 使用条件推断 使用函数 make 的运行 隐含规则 使用make更新函数库文件 后序 近期在学习Linux下的C编程,买了一本叫<Linux环境下的C编程指南>读到makefile就越看越迷糊,可能是我的理解能不行. 于是google到了以下这篇文章.通俗易懂.然后把它贴出来,方便学习. 后记,看完发现这篇文章和<Linux环境下的C编程指南>

linux基础学习笔记——操作大全

作者:liaoyi 更新时间:2014-6-2 ****************基本操作***************** 关机 shutdown -h now    root用户               init 0              root用户halt      root+一般用户poweroff 重启shutdown -r now    root用户init6     root用户reboot            root+一般用户 注意:1.shutdown 比较灵活,可

Linux驱动学习步骤(转载)

1. 学会写简单的makefile 2. 编一应用程序,可以用makefile跑起来 3. 学会写驱动的makefile 4. 写一简单char驱动,makefile编译通过,可以insmod, lsmod, rmmod. 在驱动的init函数里打印hello world, insmod后应该能够通过dmesg看到输出. 5. 写一完整驱动, 加上read, write, ioctl, polling等各种函数的驱动实现. 在ioctl里完成从用户空间向内核空间传递结构体的实现. 6. 写一bl