一个通用的Makefile框架
先做一个简单的记录,后续有时间再慢慢完善补充细节。
先上一个整体图片:

其中,最重要的文件就是:program_template.mk。
下面是program_template.mk最重要的内容:
$(1)_COBJS = $$(patsubst $$($(1)_SDIR)%.c,$$($(1)_BIN)/%.o,$$($(1)_CSRCS))
$(1)_OBJS = $$($(1)_COBJS) $(1)_COBJDEPS = $$(patsubst $$($(1)_SDIR)%.c, $$($(1)_BIN)/%.d,$$($(1)_CSRCS))
$(1)_OBJDEPS = $$($(1)_COBJDEPS $$($(1)_COBJS): $$($(1)_BIN)/%.o: $$($(1)_SDIR)%.c
$$(CC) $$($(1)_CFLAGS) $$($(1)_CXXFLAGS) -c $$< -o $$@ $$($(1)_COBJDEPS): $$($(1)_BIN)/%.d: $$($(1)_SDIR)%.c
[ -d $$(@D) ] || mkdir -p $$(@D) && \
$$(CC) -M -MP $$($(1)_CFLAGS) $$($(1)_CXXFLAGS) $$< | \
sed 's|\($$(notdir $$*)\)\.o[ :]*|$$(dir $$@)\1.o $$@ : |g' > $$@ $(1): $$($(1)_EXEC) ; $$($(1)_EXEC): $$($(1)_OBJS) $$($(1)_LIBDEPS)
$$(CC) -o $$@ $$($(1)_OBJS) $$($(1)_LDFLAGS)
echo $$@ : $$^ > $$@_EXEC.dep
最重要的内容已列出,后续有时间再慢慢完善一些细节,有对Makefile有兴趣的朋友可以探讨交流。
一个通用的Makefile框架的更多相关文章
- 编写一个通用的Makefile文件
1.1在这之前,我们需要了解程序的编译过程 a.预处理:检查语法错误,展开宏,包含头文件等 b.编译:*.c-->*.S c.汇编:*.S-->*.o d.链接:.o +库文件=*.exe ...
- Linux C编程学习之开发工具3---多文件项目管理、Makefile、一个通用的Makefile
GNU Make简介 大型项目的开发过程中,往往会划分出若干个功能模块,这样可以保证软件的易维护性. 作为项目的组成部分,各个模块不可避免的存在各种联系,如果其中某个模块发生改动,那么其他的模块需要相 ...
- 一个通用的Makefile (转)
据http://bbs.chinaunix.net/thread-2300778-1-1.html的讨论,发现还是有很多人在问通用Makefile的问题,这里做一个总结.也作为以后的参考. ...
- 一步一步写一个简单通用的makefile(四)--写一个通用的makefile编译android可执行文件
通常要把我们自己的的代码编译成在android里面编译的可执行文件,我们通常是建一个文件夹 . ├── Android.mk ├── Application.mk ├── convolve.cl ├─ ...
- 一个通用的Makefile(二)
1.各级子目录的Makefile: obj-y += file.o obj-y += subdir/ “obj-y += file.o” 表示把当前目录下的file.c编进程序里. “obj-y += ...
- 一个通用的makefile(一)
最近在编写Android编译系统时,需要遍历每一个目录下每一个文件夹下的makefile,网上的方法有些繁琐 :就直接贴上自己遍历子目录深度为1:(for temporary)(之后会继续更新) 下 ...
- 14、编写一个通用的Makefile
编译test_Makefile的方法:a. gcc -o test a.c b.c对于a.c: 预处理.编译(C文件转换成汇编).汇编(汇编转换成机器码)对于b.c:预处理.编译.汇编最后链接优点:命 ...
- 一个通用的makefile
# ESDK the makefile setting file - chenwg@20131014 # you can modify "PC = 1" such as " ...
- 我所使用的一个通用的Makefile模板
话不多说,请看: 我的项目有的目录结构有: dirls/ ├── include │ └── apue.h ├── lib │ ├── error.c │ ├── error.o │ ...
随机推荐
- mysql(数据库,sql语句,普通查询)
第1章 数据库 1.1 数据库概述 l 什么是数据库 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作. l 什 ...
- spring4、hibernate4整合xml配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- Python一个有意思的地方:reduce、map、filter
今天阅读了关于Python函数式编程的系列文章,地址在这里: http://www.cnblogs.com/huxi/archive/2011/06/24/2089358.html 里面提到了四个内建 ...
- userBean-作用范围session
package com.java1234.model; public class Student { private String name;private int age; public Strin ...
- 洛谷 P1855 榨取kkksc03
题目描述 洛谷2的团队功能是其他任何oj和工具难以达到的.借助洛谷强大的服务器资源,任何学校都可以在洛谷上零成本的搭建oj并高效率的完成训练计划. 为什么说是搭建oj呢?为什么高效呢? 因为,你可以上 ...
- Netweaver和CloudFoundry是如何运行Web应用的?
Netweaver 在Jerry的微信公众号文章SAP Fiori应用的三种部署方式里提到SAP Fiori应用以BSP应用的方式部署在ABAP Front-End Server上.那么这些BSP应用 ...
- 字符串转换JSON 的方法
function (sJSON) { if (window.JSON) { return window.JSON.parse(sJSON); } else { return eval('(' + sJ ...
- HDU 5451 Best Solver(fibonacci)
感谢这道题让我复习了一遍线代,还学习了一些奇奇怪怪的数论. 令 二项展开以后根号部分抵消了 显然有 所以要求的答案是 如果n比较小的话,可以直接对二项式快速幂,但是这题n很大 这个问题和矩阵的特征值以 ...
- vue 中根据地址名称获取实际经纬度方法
<div id="container" class="map" style="margin-top:30px; width: 1200px;he ...
- iBatis for net 框架使用
简介:ibatis 一词来源于“internet”和“abatis”的组合,是一个由Clinton Begin在2001年发起的开放源代码项目,到后面发展的版本叫MyBatis但都是指的同一个东西.最 ...