makefile_1(初识make)
Makefile有三个非常有用的变量。分别是$@,$^,$<代表的意义分别是:
$@--目标文件,$^--所有的依赖文件,$<--第一个依赖文件。
LIBS = -lm
CFLAGS = -Wall
#CFLAGS += -g
#CXXFLAGS += -g
OBJS = server_socket.o
main:${OBJS}
gcc -lstdc++ -std=c++11 -o server_main ${OBJS} ${LIBS}
clean:
rm -f server_main ${OBJS}
install:
cp -a server_main /usr/local/bin
uninstall:
rm -f /usr/local/bin/server_main
# This make file is a test rule file
# Version 0.2 2009/06/11
LIBS = -lm
OBJS = main.o haha.o sin_value.o cos_value.o
main: ${OBJS}
gcc -o main ${OBJS} ${LIBS}
clean:
rm -f main ${OBJS}
install:
cp -a main /usr/local/bin
uninstall:
rm -f /usr/local/bin/main
# 全局Makefile文件 # * --------------------使用说明--------------------
# 此Makefile执行时有两种模式
# 一、非递归make模式
# 自动编译当前目录下的所有.c文件以并分别链接生成对应的.o文件和可执行文件。
# 给simple_mode赋任意值,然后包含此Makefile文件即可开启此模式。
# 二、递归make模式
# 会在当前目录的所有子目录下分别执行make命令
# 给recursive_mode赋任意值,然后包含此Makefile文件即可开启此模式。
# 其它变量说明见各自的注释 # * --------------------整体目标-------------------- # 三个虚拟目标
# all 编译链接所有文件
# debug 用来辅助测试Makefile,比如打印一些变量等等
# clean 清理所有文件 .PHONY : all clean debug all :: debug :: clean :: # * --------------------CFLAGS和LDFLAGS-------------------- # ** 标准变量CFLAGS和LDFLAGS设置 # 打开警告和调试信息选项
CFLAGS += -Wall -g # ** 添加对gtk程序的编译链接支持 # 自定义变量:
# gtk 相当于gtk2
# gtk2 按照gtk2的环境来设置CFLAGS
# gtk3 按照gtk3的环境来设置CFLAGS # 生成gtk程序,默认为gtk2
ifdef gtk
CFLAGS += $(shell pkg-config --cflags --libs gtk+-2.0)
endif
ifdef gtk2
CFLAGS += $(shell pkg-config --cflags --libs gtk+-2.0)
endif
ifdef gtk3
CFLAGS += $(shell pkg-config --cflags --libs gtk+-3.0)
endif # * --------------------简单make模式(不递归)-------------------- # 自定义变量:
# simple_mode 开启简单make模式
# sources_exclude 忽略的源文件列表
# objects_exclude 忽略的目标文件列表
# programs_exclude 忽略的程序文件列表(即最终的可执行文件)
# rmobj 删除的文件列表
# rmobj_exclude 忽略的删除文件列表 # 说明:
#
# 1、如果一个源文件添加到了$(sources_exclude)变量中,那么它对应的目标文
# 件和最终的可执行文件会被自动添加到$(objects_exclude)和
# $(programs_exclude)中
#
# 2、$(rmobj_exclude)是指这样一个文件列表,原本应该被删除的文件(例如某
# 个可执行文件),但不想让它在执行make clean时被自动删除 # --------------------对当前目录下的普通文件执行make--------------------
sources_all = $(wildcard *.c)
sources = $(filter-out $(sources_exclude), $(sources_all)) objects_all = $(patsubst %.c,%.o,$(sources))
objects += $(filter-out $(objects_exclude), $(objects_all)) programs_all = $(patsubst %.o,%,$(objects))
programs += $(filter-out $(programs_exclude), $(programs_all)) rmobj += $(wildcard *~) ifdef simple_mode
all :: $(programs) debug ::
echo sources_all: $(sources_all)
echo sources_exclude: $(sources_exclude)
echo sources: $(sources)
echo objects_all: $(objects_all)
echo objects_exclude: $(objects_exclude)
echo objects: $(objects)
echo programs_all: $(programs_all)
echo programs_exclude: $(programs_exclude)
echo programs: $(programs)
echo rmobj: $(rmobj) clean ::
-rm -f $(programs_all) $(objects_all) $(rmobj)
endif # * --------------------递归make模式-------------------- # 自定义变量:
# recursive_mode 是否开启递归make模式
# subdirs_exclude 被忽略的文件夹列表,即不会进入这个文件夹执行递归make # 判断是否存在子目录以及在子文件夹里执行make
ifdef recursive_mode
subdirs_all := $(sort $(subst /,,$(dir $(wildcard */*))))
subdirs = $(filter-out $(subdirs_exclude), $(subdirs_all))
all :: $(subdirs)
@for subdir in $(subdirs); do \
$(MAKE) -C $$subdir; \
done debug ::
echo subdirs_all: $(subdirs_all)
echo subdirs_exclude: $(subdirs_exclude)
echo subdirs: $(subdirs) clean ::
@for subdir in $(subdirs); do \
$(MAKE) -C $$subdir clean; \
done
endif # * --------------------添加对flymake的支持-------------------- check-syntax:
gcc $(CFLAGS) -o /tmp/flymake-nul -S ${CHK_SOURCES}
makefile_1(初识make)的更多相关文章
- Android动画效果之初识Property Animation(属性动画)
前言: 前面两篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画).Frame Animation(逐帧动画)Andr ...
- 初识Hadoop
第一部分: 初识Hadoop 一. 谁说大象不能跳舞 业务数据越来越多,用关系型数据库来存储和处理数据越来越感觉吃力,一个查询或者一个导出,要执行很长 ...
- python学习笔记(基础四:模块初识、pyc和PyCodeObject是什么)
一.模块初识(一) 模块,也叫库.库有标准库第三方库. 注意事项:文件名不能和导入的模块名相同 1. sys模块 import sys print(sys.path) #打印环境变量 print(sy ...
- 初识IOS,Label控件的应用。
初识IOS,Label控件的应用. // // ViewController.m // Gua.test // // Created by 郭美男 on 16/5/31. // Copyright © ...
- UI篇(初识君面)
我们的APP要想吸引用户,就要把UI(脸蛋)搞漂亮一点.毕竟好的外貌是增进人际关系的第一步,我们程序员看到一个APP时,第一眼就是看这个软件的功能,不去关心界面是否漂亮,看到好的程序会说"我 ...
- Python导出Excel为Lua/Json/Xml实例教程(一):初识Python
Python导出Excel为Lua/Json/Xml实例教程(一):初识Python 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出 ...
- 初识SpringMvc
初识SpringMvc springMvc简介:SpringMVC也叫Spring Web mvc,属于表现层的框架.Spring MVC是Spring框架的一部分,是在Spring3.0后发布的 s ...
- 初识redis数据类型
初识redis数据类型 1.String(字符串) string是redis最基本的类型,一个key对应一个value. string类型是二进制安全的.意思是redis的string可以包含任何数据 ...
- Redis初识、设计思想与一些学习资源推荐
一.Redis简介 1.什么是Redis Redis 是一个开源的使用ANSI C 语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value 数据库,并提供多种语言的API.从2010 年 ...
随机推荐
- eclipse中运行python脚本中有注释为中文的内容,报错:SyntaxError: Non-ASCII character '\xe5'
'''Created on 2015年7月2日 @author: liujuan'''import sysreload(sys) 以上为注释的有个日期中文的,结果运行报错:SyntaxError: N ...
- while练习:输入一个班级的人数,然后依次输入学员成绩,计算班级学员的平均成绩和总成绩。
Console.WriteLine("请输入班级的总人数:"); int count = int.Parse(Console.ReadLine()); ;//声明一个循环变量来记录 ...
- Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib/dyld_sim is not owned by root.
sudo chown -R root /Applications/Xcode6.1.1.app/ 这里把这个 /Applications/Xcode6.1.1.app/替换成你xocde据在的位置
- Spring依赖注入:注解注入总结
更多11 spring 依赖注入 注解 java 注解注入顾名思义就是通过注解来实现注入,Spring和注入相关的常见注解有Autowired.Resource.Qualifier.S ...
- xss概念剖析
XSS又叫CSS (Cross-Site Scripting) ,跨站脚本攻击.恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意 ...
- memcache 缓存的批量删除方案(转)
memcache 默认只支持使用delete(key)和 flush_all,这两种方法都太极端了,不能满足用户的特定需求,如:批量删除‘aaaaaaaa_’开头的所有缓存,这个时候该怎么办? 1 g ...
- Log4Net日志记录两种方式
简介 log4net库是Apache log4j框架在Microsoft .NET平台的实现,是一个帮助程序员将日志信息输出到各种目标(控制台.文件.数据库等)的工具. log4net是Ap ...
- c# params
每个C#函数都允许有个参数带params关键字,在调用的时候可以不给他传值,也可以给他传值,还可以给他传多个值,例子如下: using System; using System.Collections ...
- 基于Node.js + jade + Mongoose 模仿gokk.tv
原文摘自我的前端博客,欢迎大家来访问 http://www.hacke2.cn 关于gokk 大学的娱乐活动基本就是在寝室看电影了→_→,一般都会选择去goxiazai.cc上看,里面的资源多,质量高 ...
- 前端框架react研究
摘要: 最近公司要做一个嵌套在app中的应用,考虑着用Facebook的react来开发view,所以就研究了下.下面是我在开发中遇到的坑,希望能给你帮助. 项目地址:https://github.c ...