makefile编写差异】的更多相关文章

由于zlib动态库在linux下引用的问题引出了对于简练的makefile的学习.之前通过看网络上的一些文章自己也算简单了解如何编写一个makefile,可总是不那么美观,今天经过辉哥的指点,对于makefile做了调整,看下两者之间的差别吧.如果有更好的方法,欢迎指点. 第一次文件如下: CPP=filehead.cpp xmailuncompress.cpp zlibstrage.cpp compressfactory.cpp md5.cpp OBJ = md5.o compressfact…
Windows 下的 Makefile 编写(一)Makefile的基本规则 作者:cntrump Makefile对于很多人来说是陌生的,特别是习惯于使用 IDE 的人来说,似乎没有听说过 Makefile ,因为Makefile 的工作都由IDE代劳了.但是Makefile 的地位是不可忽略的,从VC诞生到现在Nmake这个实用程序就一直伴随着VC编译器一起发行. 很多大的工程都是基于Makefile编译和维护的,对于开源项目来说,大多数都使用Makefile进行编译,使用IDE来编译大型工…
开了一个交流群,欢迎爱好者和开发者一起交流,转载请注明出处. QQ群:519230208,为避免广告骚扰,申请时请注明 “开发者” 字样 ======================================================== automake和autoconf 生成大型项目的makefile编写 http://blog.csdn.net/fuli1215/article/details/6399175 使用GNU Autoconf/Automake创建Makefile…
Makefile和Make Rules 多模块软件.依赖树和Make 默认规则 Make使用程序对简单变量的支持 内建变量 虚目标 特殊目标 一般性语法错误及其纠正措施 命令行的使用和调试 Makefile中常用规则总结 make常用选项 -d  显示调试信息 -f  指定从哪个文件中读取依赖关系信息.默认文件是“Makefile”或“makefile” ,"-"表示从标准输入 -h 显示所有的Makefile的help信息 -n  打印所有Makefile执行命令,但不执行这些命令…
做开发快3年了,在linux下编译安装软件算是家常便饭了.就拿gcc来说,都有不下10次了,可基本每次都会碰到些奇奇怪怪的问题.看来还是像vs.codeblocks这样的ide把人弄蠢了.便下定决心一定要好好学习下如何在linux下纯手工gcc编译c项目.今天学了2点,一个是库文件处理,另一个是makefile编写. 学习的系统是centos6.6,编译升级的gcc4.8.2,明天写个博客总结下这回gcc安装的过程,每次都能学到些东西. gcc的编译过程 首先需要清楚gcc编译做了些什么 源文件…
makefile很久就接触过了,但是一直没怎么深入的去学习和总结:在项目中我也只是看看makefile或者修改部分语句,全部自己动手写的话还真没有:知识在于沉淀,这句说的非常好,所以现在把自己理解的东西,记录下来,以便后面查阅: 这篇blog要分享的是在单目录下多文件的makefile编写,首先说明当前目录下有多少文件:fun.h   fun.c  main.c  makefile:其中*.c 文件都要依赖 *.h文件: 首先常规编译: 预处理期:gcc  -E  -o fun.i  fun.c…
Makefile编写 单目录 测试程序在同一个文件中,共有func.h.func.c.main.c三个文件,Makefile写法如下所示: CC = gcc CFLAGS = -g -Wall main:main.o func.o $(CC) main.o func.o -o main main.o:main.c $(CC) $(CFLAGS) -c main.c -o main.o func.o:func.c $(CC) $(CFLAGS) -c func.c -o func.o clean:…
以前对makefile的编写,限于刚开始接触,我都比较局限一些死板的格式,有时候就会显得有些繁琐.在进一步了解一些系统编译和链接的知识后,对makefile编写流程有了一些新的认识,所以来此梳理梳理,方便更灵活地编写makefile. 限于makefile认识不足,这里参考了一篇比较好博文:makefile 关于makefile makefile带来直接好处就是——“自动化编译”.一旦写好,只需要一个make命令,整个工程完全自动编译,所以十分方便.而Makefile文件就是告诉make命令怎么…
需使用GCC编译器,关于MinGW的安装指南:https://people.eng.unimelb.edu.au/ammoffat/teaching/20005/Install-MinGW.pdf 单个.c文件且没有使用自定义头文件的编译,在命令行: • gcc -o programName program.c -o后紧跟生成程序名 其余常用选项: -Wall      显示全部警告信息 -g        产生带调试信息的编译后目标代码,供调试器(如gdb使用) -c    仅编译 或 • m…
转自:https://www.cnblogs.com/ljtknowns/p/5647793.html 文件目录结构如下 1 dynamiclibapp.c 2 Makefile 3 comm/inc/apue.h 4 comm/errorhandle.c 5 dynamiclib/Makefile 6 dynamiclib/dynamiclib_add.c 7 dynamiclib/dynamiclib_mul.c 8 dynamiclib/inc/dynamiclibs.h 9 dynami…
编译:把高级语言书写的代码转换为机器可识别的机器指令.编译高级语言后生成的指令虽然可被机器识别,但是还不能被执行.编译时,编译器检查高级语言的语法.函数与变量的声明是否正确.只有所有的语法正确.相关变量定义正确编译器就可以编译出中间目标文件.通常,一个高级语言的源文件都可对应一个目标文件.目标文件在Linux中默认后缀为“.o”(如“foo.c”的目标文件为“foo.o”). 链接:将多.o文件,或者.o文件和库文件链接成为可被操作系统执行的可执行程序(Linux环境下,可执行文件的格式为“EL…
经过这次地库项目之后,虽然时间不久,跟团队在一起,虽然队员不一定在技术上有过人之处,但是来自大公司的员工,在工具使用和代码规范方面还是有点可鉴之处,在搭建主控模块是,就得面临makefile编写,因为所有的功能模块都得自己实现,所以使得我不得不熟练下makefile,至少在以后的项目中,能用上自己写的模板! 在默认的方式下,也就是我们只输入make命令.那么, 1.make会在当前目录下找名字叫“Makefile”或“makefile”的文件.    2.如果找到,它会找文件中的第一个目标文件(…
工作过程中,平时不怎么关注Makefile的书写规则,对于遇到的编译错误一般能看懂Makefile的基本规则也能解决.但如果想要编写Makefile文件还是有相当的难度的,更不用说包含多个目录和文件的功程了.于是在调试了一下午的情况下,终于把一个包含多个目录的基本Makefile给实现了,特此记录下来. 其实编写这个Makefile的目的很简单:便于集中分类管理平时的小程序. (文章不是用来描述Makefile规则) 1. Makefile多目录结构 在windows上可以使用tree命令查看目…
最近将Makefile的编写进行了整理和提炼了一下,大致分为五个步骤: 编译总共为五个部分 1.设置编译环境 set compile environment 2.获取要编译的源文件,以及把源文件转换为目标文件 ( 源文件和目标文件) source to obj 3.将文件编译为目标文件 OBJing 4.将目标文件链接成可执行文件或(打包为)动态库,或静态库  linking 5.其他方面 clean等 下面给出一个简单的makefile模板(实际项目中可依照此模板进行扩展): 来看看这个模板:…
[Introduction] make 是程序员很好用的工具,如果存在makefile存在,每次更新代码,执行shell命令 shell 就可以执行所有需要编译的文件,make是根据你编写的Makefile文件和源程序的最后的修改时间来决定哪些文件需要更新重编的. [Introduction to Makefiles] 问题的关键是如何编写一个Makefile文件,我们都是通过Makefile 来告诉make工具怎么去做.一个简单的makefile的规则如下: target ... : prer…
随着移动互联网的发展,移动开发也越来越吃香了,目前最火的莫过于android,android是什么就不用说了,android自从开源以来,就受到很多人的追捧.当然,一部人追捧它是因为它是Google开发的.对一个程序员来说,一个系统值不值得追捧得要拿代码来说话.我这里并不打算分析android的代码,而是android的makefile,也许大家已经知道了在android源码里,我们可以看见很多makefile文件,起初我也不明白,经过一段时间的研究,后来慢慢明白了,我想通过分析andorid的…
转自陈皓 (CSDN) 概述—— 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和 professional的程序员,makefile还是要懂.这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义.特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力. 因为,makef…
前面已经分享了单目录项下多文件的makefile的编写,现在来看看多目录下多文件makefile的编写: 在做项目时,一般文件都会分几个目录来存放:基本的是  include/  bin/ src/ obj/ lib/ tools/,这几个文件:我先说下我的文件存放目录,用ls -R可以查看到所有文件:./include/common.h    ./src/main.c    ./src/printStatus.c  就三个文件,其中*.c 文件都依赖于 *.h文件: 同样的先上第一版makef…
对于程序设计员来说,makefile是我们绕不过去的一个坎.可能对于习惯Visual C++的用户来说,是否会编写makefile无所谓.毕竟工具本身已经帮我们做好了全部的编译流程.但是在Linux上面,一切变得不一样了,没有人会为你做这一切.编代码要靠你,测试要靠你,最后自动化编译设计也要靠你自己. Makefile 介绍 首先,我们用一个示例来说明Makefile的书写规则.以便给大家一个感兴认识.我们的规则是: 1)如果这个工程没有编译过,那么我们的所有C文件都要编译并被链接. 2)如果这…
1. Makefile 简介 Makefile 是和 make 命令一起配合使用的. 很多大型项目的编译都是通过 Makefile 来组织的, 如果没有 Makefile, 那很多项目中各种库和代码之间的依赖关系不知会多复杂. Makefile的组织流程的能力如此之强, 不仅可以用来编译项目, 还可以用来组织我们平时的一些日常操作. 这个需要大家发挥自己的想象力. 本篇博客是基于 {精华} 跟我一起写 Makefile 而整理的, 有些删减, 追加了一些示例. 非常感谢 gunguymadman…
概述 什么是makefile?或许非常多Winodws的程序猿都不知道这个东西,由于那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序猿,makefile还是要懂.这就好像如今有这么多的HTML的编辑器,但假设你想成为一个专业人士,你还是要了解HTML的标识的含义.特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makefile,从一个側面说明了一个人是否具备完成大型工程的能力. 由于,makefile关系到了整个工程的编译…
父Makefile 在src目录下包含很多文件夹,那么需要遍历所有的目录执行Makefile,那么给一个在src目录下的Makefile. # 需要排除的目录 exclude_dirs := include bin # 取得当前子目录深度为1的所有目录名称 DIRS := $(shell -type d) DIRS := $(basename $(patsubst ./%,%,$(DIRS))) DIRS := $(filter-out $(exclude_dirs),$(DIRS)) .PHO…
1.wildcard : 扩展通配符 2.notdir : 去除路径 3.patsubst :替换通配符 格式:$(patsubst <pattern>,<replacement>,<text> ) 1. src=$(wildcard *.c ./sub/*.c) 会把./ 和/sub 下的 .c全部展开: 2. dir=$(notdir $(src)) 去掉路径信息 3. obj=$(patsubst %.c,%.o,$(dir) ) 在$(patsubst %.c,…
对于大部分内核模块或设备驱动的开发者和使用者来说,最常接触到的就是各层目录下基于kbuild架构的kbuild Makefile文件.主要部分有:1.目标定义,目标定义就是用来定义哪些内容要做为模块编译,哪些要编译链接进内核. 最简单的只有一行,如obj-y += foo.o表示要由foo.c或者foo.s文件编译得到foo.o并链接进内核,而obj-m则表示该文件要作为模块编译.除了y,m以外的obj-x形式的目标都不会被编译. 由于既可以编译成模块,也可以编译进内核,更常见的做法是根据.co…
a.c #include<stdio.h> #include "a.h" int main() { printf("hello world\n"); printf("A= %d\n",A); test_fun(); ; } a.h #define A 1 b.c #include <stdio.h> int test_fun() { printf("it is B\n"); ; } 编译test_Mak…
首先来看一个简单的Android makefile,这个是我上篇文章写的,重新摘出来: LOCAL_PATH:=$(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS := eng LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog LOCAL_SRC_FILES:= \ ppp.c LOCAL_MODULE:= PPPreboot include $(BUILD_EXECUTABLE) #include $…
一天下来,Makefile终于完成了,可以实现c文件和头文件不同目录,并将输出文件输出到其他如output目录,将执行文件和makefile文件并列: 源码如下: # ============================================================ # Makefile for project (by chen long 2019.03.29) ====== # make clean : clean output/ ====== # make : make…
本节我们讨论一个Makefile中的一个重要的特殊目标:伪目标. 伪目标是这样一个目标:它不代表一个真正的文件名,在执行make时可以指定这个目标来执行其所在规则定义的命令,有时我们也可以将一个伪目标称为标签.使用伪目标有两点原因:1. 避免在我们的Makefile中定义的只执行命令的的目标(此目标的目的为了执行执行一系列命令,而不需要创建这个目标)和工作目录下的实际文件出现名字冲突.2. 提高执行make时的效率,特别是对于一个大型的工程来说,编译的效率也许你同样关心.以下就这两个问题我们进行…
变量 1. Makefile中变量和函数的展开(除规则命令行中的变量和函数以外),是在make读取makefile文件时进行的,包括“define”定义的变量. 2. 变量可以用来代表一个文件名列表.编译选项列表.程序运行的选项参数列表.搜索源文件的目录列表.编译输出的目录列表等. 3. 变量名是不包括“:”.“#”.“=”.前置空白和尾空白的任何字符串. 4. 变量名是大小写敏感的.推荐的做法是:在对于内部定义定义的一般变量使用小写方式,而对于一些参数列表(例如:编译选项CFLAGS)采用大写…
隐含规则———— 在我们使用Makefile时,有一些我们会经常使用,而且使用频率非常高的东西,比如,我们编译C/C++的源程序为中间目标文件(Unix下是[.o]文件,Windows下是[.obj]文件).本章讲述的就是一些在Makefile中的“隐含的”,早先约定了的,不需要我们再写出来的规则. “隐含规则”也就是一种惯例,make会按照这种“惯例”心照不喧地来运行,那怕我们的Makefile中没有书写这样的规则.例如,把[.c]文件编译成[.o]文件这一规则,你根本就不用写出来,make会…