windows 下使用makefile(二)---- 编译

之所以需要另外设定" 执行时需要="" mspdb60.dll,而它被安装於="" c:\msdev\common\msdev98\bin="" 之中。<="" p><p>如果你写的程式不只是单纯的="" 程式,还用到了="" mfc,一样可以在="" console="" mode="" 下编译,这时候你的环境变数应该如此设定:<="" mfc\include="" 和="" mfc\lib,就可以让编译器和联结器找到="" mfc="" 的="" libraries。如果你还需要用到="" atl,就得在="" 环境变数中再加上="" c:\msdev\vc98\atl\include。<="" files\microsoft="" studio下,所以改写批次档如下:<="" studio\vc98\bin;d:\program="" studio\common\msdev98\bin="" studio\vc98\include;d:\program="" studio\vc98\mfc\include="" studio\vc98\lib;d:\program="" studio\vc98\mfc\lib<="" p><p>然后运行cmd,将以上设置复制粘贴到鼠标闪烁处。如果想要确认路径更改正确,可以键入set命令查看。<="" p><p>注:这样的环境变量修改,仅对本次命令行窗口有效,因为它是一个虚拟设备。如果想要每次进入时,不做这个工作。可以运行vcvars32.bat然后设置你的环境变量。为了不影响vc++的原本设置方便集成环境的使用,我并没有实际操作,一个简单的复制粘贴也不见得麻烦。另外还可以在我的电脑-属性-高级-环境变量里直接修改,这个修改也是永久性的。到这里,路径就设置好了。下面试操作一下:<="" p><p>我在f:\盘保存了一个test.cpp文件作为测试文件。文件内容如下:<="" #include="" <iostream.h>="" void="" main()="" {=""  cout<<"hello"<<endl;="" }="========================================

使用cd命令把当前命令行窗口路径切换到F:\>,然后执行cl" test.cpp命令,在f:\盘路径下生成了两个文件,test.obj和test.exe。然后再运行test.exe,就可以看到结果了(输出hello)。<="" p><p>下面再举一个例子,也就是下面要学习的makefile文件。测试文件名为mypath.mak(你可以任意取名),依旧存储在当前路径下。<="" all:  =""  ="" @echo  ="" $(path)="=========================

运行命令nmake" mypath.mak,你可以看到输出结果为你刚才设置过的路径(我的结果是d:\program="" studio\common\msdev98\bin)。<="" p><p>2.产生自己的makefile文件<="" p><p>下面是我在网上找到的一个简单的例子及其解说(<a="" target="_blank" href="http://www.readygo.com.cn/it-1104697.html" >http:="" www.readygo.com.cn="" it-1104697.html<="" a>)<="" 下面来看一个简单的例子(以下内容均以win32平台为例):  ="" 文件名:makefile  ="" 1.  ="" #  ="" makefile  ="" 2.  ="" this  ="" is  ="" a  ="" example  ="" of  ="" make  ="" file  ="" 3.  ="" all:a1  ="" a2  ="" 4.      ="" all!  ="" 5.  ="" a1:  ="" 6.      ="" a1!  ="" 7.  ="" a2:  ="" 8.      ="" a2!  =""    ="" 运行make后,结果如下:  =""  现在让我们来分析一下这个简单的规则文件。=""   =""       ="" 第1、2行不用说,一眼就可以看出是注释。在make规则文件中,注释是以“#”开始,是行注释,和c++中的“="" ”功能一样。不过你可不能把它放到其它的语句之后,否则就错了。第3行就是规则开始了!all:a1  ="" a2一行中,规则的名字就是all,它通常是目标名(target)。一条规则可以有不止一个名字,像这一行,你也可以把它写成all  ="" all2:a1  ="" a2。这时,规则就有了两个名称—all和all2。当然,还可以有更多,都看你自己。后面的5、7两行也分别是两条规则的起始。在“:”之后的,就是依赖项。在这一行里,依赖项有两个,分别是a1和a2。这些依赖项可以是其它的规则名(目标名),也可以是文件名。依赖和目标之间的关系就是“依赖关系”。一条规则中,可以有零个(像后面的两条规则)、一个或多个依赖。第4行@echo  ="" all!是命令行。它是执行all规则时要执行的命令。要注意的是,一条规则内的命令要以tab为一行的起始,以表示命令是属于一个规则。一条规则也可以有多条命令,每条命令占一行(要以tab开头)。至于可以使用哪些命令,这完全取决于你使用的os和shell。=""        ="" 当执行make时,它会找到第一条规则。然后,make就会检查依赖和目标之间的关系。如果目标比依赖旧,就执行规则,以更新目标。执行完规则就结束。如何判定目标和依赖的新旧呢?如果目标(文件)不存在,目标的时间就为0;如果目标(文件存在),目标的时间就为文件的修改时间。如果依赖项是一条规则,就执行依赖的规则(这里是一个递归),然后依赖的时间就是当前最新时间;如果是一个存在的文件,就为文件的修改时间,否则就报错。之后,就可以比较目标和依赖之间的关系。不过,有一点特殊的是,在没有依赖项时,依赖的时间为1。="" 在这个例子中,make先找到规则“all”,发现目标不存在,所以目标的时间为0;然后在查找依赖“a1”,结果“a1”不存在;于是,执行规则“a1”。“a1”不存在,所以它的时间为0,而“a1”没有依赖,它的依赖时间为1;1>0,所以,执行规则“a1”。然后返回规则“all”,再检查依赖“a2”。“a2”执行过程同“a1”。这时,“all”的目标时间为0,依赖时间为最新时间。于是,执行规则“all”的命令。="" 当然,大家也可以指定一条规则让make执行,比如:make  ="" a1这个命令就是告诉make程序不去找第一条规则,而是规则“a1”来执行。并且我们还可以一次执行多条规则,比如:执行make  ="" a1  ="" a2就会连续执行“a1”、“a2”两条规则。  ="" p><p>     ="" ok,虽然讲得很混乱,但也费了我半天的力气。大家应该有一点了解make规则的执行过程了吧。  ="=============================================

依赖的基本写法如下:" target:dependence=""          ="" command<="" target可以是文件名。dependence可以是其它的target名或文件名。command就是操作系统所运行的命令行。  ="" 变量  =""      ="" 一个make规则文件有这些内容就已经基本可以工作了。可是,当我们在编译一个程序时,如果有些内容要反复用到,每次都要写一长串的话,是很麻烦的。于是,make就引入了宏这个概念(其实也可以看成简单的脚本语言)。  ="" 宏变量的定义如下:  ="" var1  ="  " macro  ="" demo!  ="" var1就是变量名,它的值就是“this  ="" demo!”  ="" 如果我们要使用这个变量的值,那只有通过$这个运算符才行—$(var1)代表的就是“this  ="" demo!”。  ="" 如下makefile  ="" 3.      ="" $(var1)  ="" 结果输出:  ="" 用户在执行命令行时也可以定义宏变量。其形式如下:  ="" all  ="" var1="”this  " test”  ="" 执行结果为:  ="" test  ="" 我们不仅可以使用自定义变量,还可以通过这种方式使用系统环境变量。这样可以大大方便我们建议灵活的规则。如下makefile  ="" 2.      ="" $(windir)  ="" c:\windows="" (注意:makefile中的变量是大小写敏感的)  ="=========================================

下面介绍makefile文件的一些内置变量:

==========================================" [email protected]代表规则中的目标名(也就是规则名)。  ="" $<代表规则中的依赖项目。注意,它只代表规则所有依赖项目中的第一项!  ="" 其它还有:  ="" $^代表规则中所有的依赖项目。  ="" $?代表规则中时间新于目标的依赖项目。  ="" 不仅如此,还可以给这些特殊的变量加一些限制。  ="" 如:  ="" 在规则  ="" debug="" out.exe  ="" :  ="" out.obj  ="" 中,[email protected]代表debug="" out.exe,而$(@d)代表目录名debug,$(@f)代表文件名out.exe。其它如$(<d)、$(<f)、$(^d)、$(^f)、$(?d)、$(?f)与此类似。  ="============================================

举个例子说明,下面是原始makefile文件内容:

==============================================" myprog="" foo.o="" bar.o=""     ="" gcc="" -o="" foo.c="" foo.h="" bar.h="" -c="" bar.c="" objs="foo.o" cc="gcc" cflags="-Wall" -g="" $(objs)="" $(cc)="" $^="" [email protected]="" $(cflags)="" $<-o="">

时间: 2024-07-30 13:50:06

windows 下使用makefile(二)---- 编译的相关文章

Windows下Caffe在GPU编译过程

Windows下Caffe在GPU编译过程 GeForce8800 GTS512: cc=1.1 CUDA6.5 问题一: src/caffe/layers/conv_layer.cu(20): error : too few arguments in function call Error in in conv_layer.cu :forward_gpu_gemm needs the argument skip_im2col #1962 解决: https://github.com/BVLC/

在Windows下使用MinGW静态编译Assimp

使用MinGW静态编译Assimp 到了5月份了,没有写一篇日志,于是自己从知识库里面拿出一篇文章充数吧.这次将要讲解如何在Windows下使用MinGW静态编译Assimp. Assimp是目前比较全的3D格式解析库了,熟悉3D游戏开发的同行都知道,3D的格式非常混乱,各种3D格式在不同场合都有他们特定的应用,游戏引擎只能够解析少部分3D格式,更多实用的格式来自游戏公司自定义的格式.而在开源领域,Assimp算是比较全的3D格式导入库了.它对3D格式理解深入,很适合整合至3D图形引擎中,让你们

windows 下使用 MinGW + msys 编译 ffmpeg

本文参考了网络上的不少文章,但由于版本环境的问题参考文章并不能直接指导编译,本文吸收多方经验,并在自己多次编译实验的基础上写成,欢迎转载,请注名出处.    FFmpeg是在Linux平台下开发的,但它同样可以在其它操作系统环境中编译运行,本文介绍的就是在windows下编译FFmpeg.一 编译准备    您最好新建一个目录专门用来保存以下下载的文件.1 下载 MinGW 和 MSYS    MinGW(Minimalist GNU on Windows):一个可自由使用和自由发布的Windo

sass学习笔记(一):sass在windows下的安装、编译

一.sass在windows下的安装 在 Windows 平台下安装 Ruby 需要先有 Ruby 安装包,可以在这里下载: https://www.ruby-lang.org/en/downloads/ Ruby 安装文件下载好后,可以按应用软件安装步骤进行安装 Ruby. Ruby 安装完成后,在开始菜单中找到新安装的 Ruby,并启动 Ruby 的 Command 控制面板Start Command Prompt with Ruby.接下来就可以安装 Sass 了. 1.通过命令安装 Sa

Windows下QT4.8.4编译环境的搭建(转载http://blog.csdn.net/bestgonghuibin/article/details/38933141)

开始使用QT了,所以第一步就是把环境搭起来,这里小记一下,以免以后忘记. 1. 下载安装文件 要使用QT功能,那么必须要下载QT的源码,还必须要一个是用QT的编译环境,可以是VS2010,也可以是专用于QT编程的QT Creator.本人选择QT Creator,所以也必须要下载QT Creator. 根据网上大部分教程及自己买的书籍获取的信息,在选择版本的时候,QT 源码选择4.8.4,而QT Creator选择2.8.0(QT5.0以后许多原有的文件路径改变). 选择好版本之后,可以上QT的

在Windows下使用Makefile(附例子)

用mingw32-make就行了,语法跟GNU make基本上是一样的,只是要针对windows写命令,比如linux下的rm指令(删除文件)在windows下需要换成del指令 为什么不用Cygwin?——老爱报些莫名其妙的错误.下面举个例子 下面用LIB_ZTHREAD代指Windows下的F:/libs/zthread_win32.a或者Ubuntu下的/home/admin/libs/zthread.a 用HEADER_ZTHREAD代指Windows下的F:/libs/ZThread-

Windows下跨VC版本编译.pyd扩展(extension)模块

Windows下官方建议用与编译Python自身相同的Visual Studio版本来编译扩展模块,目前比较常用的Python版本对应的Visual Studio分别为: Python 2.7 - Visual Studio 2008(9) Python 3.3 & 3.4 - Visual Studio 2010(10) Python 3.5 - Visual Studio 2015(14) 最近安装了一个Python 3.5,需要编译Fast R-CNN的Python扩展模块,电脑上安装的V

在windows 下使用eclipse进行编译和烧写

eclipse IDE是一款开源的前端编程软件,它提供了编写,编译和调试ESP-IDF项目的图形集成开发环境. 首先在https://www.obeo.fr/en/eclipse-download?INSTALLER-WIN64中选择需要的对应位数的eclipse. 然后在http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html下载eclipse运行所需的java环境. 在安装是选择 点

在 Windows下用 Visual Studio 编译 OpenSSL 1.1.0

到OpenSSL官方网站下载OpenSSL源代码包 1.下载 openssl-1.1.0.tar.gz 2.安装 ActivePerl, 可以到http://www.activestate.com/activeperl/downloads下载最新版本, 需要用到 perl 解释器. 注:Perl 最低版本要求5.10以上,Windows XP用户最后支持版本ActivePerl 5.20.2.2002 版本 3.使用 VS2010 下的 Visual Studio 2010 Command Pr