NMake的原理-makefile入门

Makefile详解——从入门到精通 转自ChinaUnix,作者gunguymadman,陈皓。链接地址:http://www.chinaunix.net/jh/23/408225.html 陈皓 优快云 博客:http://blog.youkuaiyun.com/haoel/article/details/2886 http://blog.youkuaiyun.com/ruglcc/article/deta... 阅读详情

makefile入门(转)

1 makefile入门

Windows CE的构建系统大量使用了Nmake工具和makfile。在大多数微软的软件和驱动开发包中都会包含Nmake工具。因此,这里有必要介绍一下makefile和Nmake工具。

1.1 makefile简介

对于许多Windows下的程序员来说,makefile可能还是个陌生的名词。因为Windows下的许多集成开发环境(例如:Microsoft Visual Studio和Borland C++ Builder等)可以帮助开发人员完成makefile需要完成的功能。通常只需要在集成开发环境中按个按钮,工具就可自动帮助我们编译、链接整个项目。想象如果没有了集成开发环境,那么就需要有另外一种方式来管理对项目的构建。

简单的来说,makefile负责帮助开发人员简化代码的编译、链接等构建工作。对于只包含几个文件的简单的项目,开发人员完全可以通过手动控制编译器、链接器来完成对项目的构建。但是想象一下对于一个拥有几百个、甚至几千个文件的大型项目,如果每次构建都是通过手动完成,那消耗的工作量和复杂程度是不可想象的。在这种情况下,makefile就有了它的用武之地。

makefile关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个自动化脚本一样,其中也可以执行操作系统的命令。

makefile带来的最大的好处是“自动化构建”。写好makefile之后,在编译的时候只需要一个命令,整个工程完全自动编译、链接,极大的提高了软件开发的效率。

makefile本质上只是一个文本文件,本身并不能运行。在运行makefile的时候还是需要外部程序来对makefile进行解释执行。NMake.exe就是用来解析并执行makefile的工具。

当用户输入nmake命令后,首先nmake会读取makefile,然后解析makefile,并根据makefile的规则来确定要编译哪些代码。然后nmake会调用编译器、链接器等一些开发工具,完成对代码的编译链接。最终会生成可执行文件。


值得一提的是makefile既不是Windows CE特有的工具也不是微软的发明创造。makefile是一种通用的自动化构建手段。在UNIX/Linux平台下有着广泛而众多的应用。许多开发工具都会提供NMake类似的工具。比如:Delphi的make,Visual C++的nmake,Linux下GNU的make等等。

1.2 makefile的编

写规则

makefile是由一个个推导和规则构成的,在NMake中这也被叫做描述块(Description Blocks)。一个最基本的推导规则的语法如下。

targets... : dependents...

    commands...

targets也就是一个目标文件,可以是Object File,也可以是可执行文件。还可以是一个标签(Label)。targets必须在一行的顶格写,前面不能有空格。

dependents就是要生成target所需要的文件或是目标依赖项。dependents与targets之间用冒号间隔。一个targets可以有多个dependents。

command也就是NMake需要执行的命令。其中commands可以是任意的Windows命令行命令。

这是一个文件的依赖关系,也就是说,target这一个或多个的目标文件依赖于dependents中的文件,其生成规则定义在command中。也就是说,dependents中如果有一个以上的文件比targets文件要新的话,command所定义的命令就会被执行。这就是makefile的规则。也就是Makefile中最核心的内容。

掌握了makefile最核心的内容,就可以尝试编写第一个makefile了。但是仅仅知道了这一点还远远不够。makefile还有很多细节的内容,下面会一点一点地介绍。在此之前,先看一个可以实际运行的makefile。以便读者对makefile有个感性的认识。

1.3 一个实际可以运行的makefile

在%_WINCEROOT%\PBWorkspaces\MyPlatform\下新建立一个目录hello,然后在hello目录下创建hello.cpp,内容如下:

#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance,

                     HINSTANCE hPrevInstance,

                     LPTSTR     lpCmdLine,

                     int       nCmdShow)

{

  MessageBox(NULL, L"Hello", L"bb", 0);

}

本部分内容的目的就是使用NMake工具来把Hello.cpp构建为Hello.exe可执行文件。

为此,在hello目录下再创建一个文本文件,名为makefile(没有扩展名)。然后用文本编辑器在makefile中输入如下内容:

#This is a demo makefile

hello.exe: hello.obj

    @echo linking...

    link -MACHINE:x86 -NODEFAULTLIB -subsystem:windowsce,5.00 -entry:WinMainCRTStartup -LIBPATH:E:\WINCE500\PBWorkspaces\MyPlatform\projroot\cesysgen\sdk\lib\x86\retail hello.obj coredll.lib corelibc.lib

hello.obj: hello.cpp

    @echo compiling...

    cl -nologo -c -I. -IE:\WINCE500\public\common\sdk\inc -DUNICODE -D_UNICODE -DUNDER_CE=500 -D_WIN32_WCE=500 -DWIN32 -DSTRICT -Dx86 -D_X86_ -DINTERNATIONAL -DL0804 -DINTLMSG_CODEPAGE=1252 hello.cpp

clean:

    del hello.obj, hello.exe

第一行是注释,在makefile中,用#表示该行内容是注释。

按照上文介绍的推导规则,这段makefile定义了两个依赖规则。hello.exe依赖于hello.obj,hello.obj又依赖于hello.cpp。

要从hello.cpp生成hello.obj,需要经过编译过程,执行编译命令。上文makefile代码中定义了两个命令,一个是操作系统的内部命令echo,作用是输出一个字符串,另外一个是调用C++编译器cl.exe,并用-c指示它只进行编译工作而不进行链接。对于从hello.obj生成hello.exe的过程也是一样的。中间调用了链接器link.exe把几个库文件链接成hello.exe。

为了简单起见,用到的路径都直接采用了写死的绝对路径。

从“开始” ? “程序” ? “Microsoft Windows CE 5.0” 菜单打开Windows CE的控制台。然后cd到hello目录,输入nmake命令,控制台的输出结果如下:

E:\WINCE500\PBWorkspaces\MyPlatform\hello>nmake

compiling...

Windows CE Version (Release) (Built on Mar  1 2004 21:46:39)

cl -nologo -c -I. -IE:\WINCE500\public\common\sdk\inc -DUNICODE -D_UNICODE -DUNDER_CE=500 -D_WIN32_WCE=500 -DWIN32 -DSTRICT -Dx86 -D_X86_ -DINTERNATIONAL -DL0804 -DINTLMSG_CODEPAGE=1252 hello.cpp

hello.cpp

linking...

link -MACHINE:x86 -NODEFAULTLIB -subsystem:windowsce,5.00 -entry:WinMainCRTStartup -LIBPATH:E:\WINCE500\PBWorkspaces\MyPlatform\projroot\cesysgen\sdk\lib\x86\retail hello.obj coredll.lib corelibc.lib

Microsoft (R) Incremental Linker Version 7.10.4017

Copyright (C) Microsoft Corporation.  All rights reserved.

这是使用dir命令查看hello目录,可以看到多了hello.obj和hello.cpp两个文件。这说明nmake已经帮我们生成了目标文件。

对于这个makefile,还有最后要介绍的一点。makefile中的clean是一个标签,通常所有的makefile中都会有clean这样一个标签,用来清理生成的文件,以便重新编译。为了调用这个标签可以在命令行下输入如下指令

nmake clean

这样,nmake就会帮我们调用系统的del命令,删除构建时生成的hello.obj和hello.exe文件了。

1.4 使用变量

让我们再回头来看看上一节中的示例makefile。如果我们希望把生成的文件由hello.exe改变为nihao.exe,那么仅仅这一丁点改动,在makefile中需要修改的地方就多达五处。这对于makefile的维护非常不方便。如果能有一种类似于C语言中宏或者变量的机制,就可以解决这个问题了。

为了makefile的易维护,在makefile中我们可以使用变量。makefile的变量也就是一个字符串,理解成C语言中的宏可能会更好。

比如,我们声明一个变量,叫TARGETNAME,在makefile一开始就这样定义: 

TARGETNAME = hello

于是,我们就可以很方便地在我们的makefile中以“$(TARGETNAME)”的方式来使用这个变量了,于是我们的改良版makefile就变成下面这个样子:

TARGETNAME = hello

SOURCES = hello.cpp

TARGETLIBS = $(TARGETNAME).obj coredll.lib corelibc.lib

LINK = link

CPPFLAGS = -nologo -c -I. -IE:\WINCE500\public\common\sdk\inc -DUNICODE -D_UNICODE -DUNDER_CE=500 -D_WIN32_WCE=500 -DWIN32 -DSTRICT -Dx86 -D_X86_ -DINTERNATIONAL -DL0804 -DINTLMSG_CODEPAGE=1252

LFLAGS = -MACHINE:x86 -NODEFAULTLIB -subsystem:windowsce,5.00 -entry:WinMainCRTStartup -LIBPATH:E:\WINCE500\PBWorkspaces\MyPlatform\projroot\cesysgen\sdk\lib\x86\retail

$(TARGETNAME).exe: $(TARGETNAME).obj

    @echo linking...

    $(LINK) $(LFLAGS) $(TARGETLIBS)

$(TARGETNAME).obj: $(SOURCES)

    @echo compiling...

    $(CPP) $(CPPFLAGS) $(SOURCES)

clean:

    del *.obj, *.exe

在这一版本的makefile中,我们在makefile的最开始定义了六个变量。TARGETNAME表示要生成的文件名,SOURCES表示源代码列表。TARGETLIBS表示要链接的库列表。LINK表示链接器的名称。CPPFLAGS和LFLAGS分别表示编译器和链接器的命令行参数。

有了这些变量定义之后,编译和链接的命令就可以写的非常简洁了,例如编译源代码的命令就可以写成:$(CPP) $(CPPFLAGS) $(SOURCES)。nmake工具会自动用变量替换这些标记,最终的结果与第一个版本还是一样的。

如果读者细心的话,可以发现我们在makefile中并没有定义CPP这个变量,但是在makefile中我们依然使用了CPP变量。这又是为什么呢?其实nmake工具默认会设置一些变量的值,对于C++编译器,nmake会默认定义CPP变量,并把它的值赋为cl,因此,在使用的时候,makefile代码中就不需要重复定义了。

1.5 使用预处理

经过上一节的改动,namefile已经有了很大的灵活性。但是,依然达不到尽善尽美的地步。如果我们要把EXE文件的入口点从WinMainCRTStartup()函数修改到WinMain(),那么依然需要修改makefile。

使用预处理可以很好的解决上面的问题。在makefile中,NMake工具允许使用预处理机制来完成如下功能:

? 按条件处理makefile

? 显示错误信息

? 包含其它的makefile

? 打开/关闭某些nmake工具的命令行开关

预处理指令以“!”开头,必须出现在每行的最开始。最常用的预处理指令是条件处理。Nmake支持如下的条件预处理指令:

!IF 

!IFDEF

!IFNDEF

!ELSE

!ELSEIF

!ELSEIFDEF

!ELSEIFNDEF

!ENDIF

它们的用法与C语言的预处理宏类似,相信读者可以很容易的理解它们的含义。

使用预处理机制来修改上一个版本的makefile,得到的新makefile如下所示:

TARGETNAME = hello

SOURCES = hello.cpp

EXEENTRY = WinMain

TARGETLIBS = $(TARGETNAME).obj coredll.lib corelibc.lib

LINK = link

!IFDEF EXEENTRY

!    MESSAGE EXEENTRY: $(EXEENTRY)

EXEENTRYOPTION=-entry:$(EXEENTRY)

!ELSE

EXEENTRYOPTION=-entry:WinMainCRTStartup

!ENDIF

CPPFLAGS = -nologo -c -I. -IE:\WINCE500\public\common\sdk\inc -DUNICODE -D_UNICODE -DUNDER_CE=500 -D_WIN32_WCE=500 -DWIN32 -DSTRICT -Dx86 -D_X86_ -DINTERNATIONAL -DL0804 -DINTLMSG_CODEPAGE=1252

LFLAGS = $(EXEENTRYOPTION) -MACHINE:x86 -NODEFAULTLIB -subsystem:windowsce,5.00 -LIBPATH:E:\WINCE500\PBWorkspaces\MyPlatform\projroot\cesysgen\sdk\lib\x86\retail

$(TARGETNAME).exe: $(TARGETNAME).obj

    @echo linking...

    $(LINK) $(LFLAGS) $(TARGETLIBS)

$(TARGETNAME).obj: $(SOURCES)

    @echo compiling...

    $(CPP) $(CPPFLAGS) $(SOURCES)

clean:

    del *.obj, *.exe

在这个版本中,主要的改动是新增加了一个变量EXEENTRY,并且增加了对于这个变量的预处理判断。如果用户定义了EXEENTRY变量,则把变量EXEENTRYOPTION的值设置成-entry:EXEENTRY,否则就设置成默认的CRT入口函数-entry:WinMainCRTStartup。修改相应的LFLAGS,把EXEENTRYOPTION加到LFLAGS中,修改就生效了。

这样,其实新增加的EXEENTRY是一个可选的变量,如果用户没有定义这个变量的值,构建也不会出错。使用预处理技术对于维护makefile,保持它的向下兼容非常有效。

注意,代码中出现的!MESSAGE也是一个宏,用来向标准输出stdout输出一个字符串。

1.6 包含其它文件

经过上面的修改,makefile中的有些模块已经非常通用了,对于每个项目都建立一个makefile也是比较复杂的。为了增强代码的重用性,可以考虑把makefile代码中通用的部分抽取出来,放在一个独立的文件中。以便在多个项目中公用。

预处理的另外一个作用是包含其它makefile文件。语法是:

! INCLUDE [<] 文件名 [>]

使用这个功能,可以实现把makefile拆分的目的。

这次,我们把makefile拆分成三个文件,名字分别叫:sources、makefile和makefile.def,都放在hello目录中。三个文件的内容分别如下:

sources文件的内容:

# This is a demo sources file

TARGETNAME =    hello

SOURCES =       hello.cpp

EXEENTRY =      WinMain

TARGETLIBS =    coredll.lib \

                corelibc.lib

makefile文件的内容:

!   INCLUDE makefile.def

makefile.inc文件的内容:

!   INCLUDE .\sources

TARGETLIBS =    $(TARGETLIBS) \

                $(TARGETNAME).obj

LINK = link

!IFDEF EXEENTRY

!    MESSAGE EXEENTRY: $(EXEENTRY)

EXEENTRYOPTION=-entry:$(EXEENTRY)

!ELSE

EXEENTRYOPTION=-entry:WinMainCRTStartup

!ENDIF

CPPFLAGS = -nologo -c -I. -IE:\WINCE500\public\common\sdk\inc -DUNICODE -D_UNICODE -DUNDER_CE=500 -D_WIN32_WCE=500 -DWIN32 -DSTRICT -Dx86 -D_X86_ -DINTERNATIONAL -DL0804 -DINTLMSG_CODEPAGE=1252

LFLAGS = $(EXEENTRYOPTION) -MACHINE:x86 -NODEFAULTLIB -subsystem:windowsce,5.00 -LIBPATH:E:\WINCE500\PBWorkspaces\MyPlatform\projroot\cesysgen\sdk\lib\x86\retail

$(TARGETNAME).exe: $(TARGETNAME).obj

    @echo linking...

    $(LINK) $(LFLAGS) $(TARGETLIBS)

$(TARGETNAME).obj: $(SOURCES)

    @echo compiling...

    $(CPP) $(CPPFLAGS) $(SOURCES)

clean:

    del *.obj, *.exe

在sources文件中我们只存放一些变量的定义,如果需要更改某些设置,只需要改动sources文件就好了。在makefile中,仅有简单的一行,把makefile.def文件导入进来。在makefile.def文件中包含所有关联推导和变量使用,并且还会把sources文件导入进来。

在控制台下输入nmake和nmake clean,同样可以顺利地对hello.exe进行构建和清除。

好了,sources、makefile和makefile.def。至此为止,一个具体而微的Windows CE构建系统就这么被我们给模拟出来了。Windows CE构建系统中的DIRS文件是build.exe在进行处理,NMake工具不会处理DIRS。

有了这些知识,读者在学习Windows CE的构建系统时,遇到makefile相关的内容应该不会再手足无措了。但是对于makefile本身的功能和作用而言,我们才刚刚开始。




make、ninja、nmake、jom 、qmake、cmake 、GN 都是什么? CMake 可以生成各种不同的构建系统所需的文件,包括 Makefile、Ninja、Visual Studio 项目文件等,从而使得项目可以在不同的环境下构建和运行。QMake 专注于 Qt 项目的构建,CMake 则是一种通用的跨平台构建工具,而 GN 则是针对特定项目的高效构建工具。NMake是微软Microsoft提供的一个构建工具,它是Make的Windows版本 ,用于 Windows 环境下的项目构建。Make是一个经典的构建工具,它通过读取名为Makefile的文件来管理程序的编译过程。 阅读详情

相关推荐

intellij-makefile:支持基于IntelliJ的IDE的Makefile

intellij-makefile:支持基于IntelliJ的IDE的Makefile

nmake简介

Microsoft nmake的使用简介

harborian的博客 5679

基于RK3588与FPGA的SDI视频处理系统:从MIPI CSI-2输入到DSI输出的全链路解析

本文深入解析了基于RK3588与FPGA的SDI视频处理系统全链路。系统利用FPGA作为高速接口转换与流管理核心,将SDI信号转换为MIPI CSI-2数据流送入RK3588进行智能图像处理与AI分析,处理结果再通过MIPI DSI回传,最终由FPGA控制编码为SDI输出,实现了专业视频接口与强大算力的高效协同。

s1t2u3的博客 669

nmake、makefile、cmake学习笔记

NMAKE Reference 5分钟理解make/makefile/cmake/nmake nmake命令(windows下的makefile) nmake.exe使用整理

haimianjie2012的专栏 3799

从S参数矩阵到硬件实现:手把手教你用耦合微带线设计Marchand巴伦

本文详细介绍了使用耦合微带线设计Marchand巴伦的完整流程。从奇偶模理论和S参数矩阵分析入手,结合ADS仿真软件进行参数优化与电磁仿真验证,最终指导PCB布局、制作与实测调试。文章以2.4GHz Wi-Fi前端电路为例,手把手演示了从理论计算到硬件实现的全过程,并分享了关键的工程经验与调试技巧。

weixin_29271263的博客 536

避坑指南:从聚宽迁移到QMT必须知道的5个细节(含Redis连接异常处理)

本文详细解析了从聚宽迁移到QMT平台时需注意的5个关键细节,特别是Redis连接池优化和xtquant重连机制。通过实战代码示例,帮助量化团队解决信号传递稳定性、时间同步、滑点控制等核心问题,确保交易策略平稳过渡。

weixin_27303545的博客 430

makefile入门

makefile入门1 makefile入门Windows CE的构建系统大量使用了Nmake工具和makfile。在大多数微软的软件和驱动开发包中都会包含Nmake工具。因此,这里有必要介绍一下makefile和Nmake工具。1.1 makefile简介对于许多Windows下的程序员来说,makefile可能还是个陌生的名词。因为Windows下的许多集成开发环境(例如:Microsoft 

嵌入式开发小站 1664

从仿真到实物:Realsense D435+ROS2焊接机械臂的视觉标定与数据验证指南

本文详细介绍了如何将Realsense D435相机与ROS2焊接机械臂从仿真环境迁移到实物部署的全过程。通过视觉标定、数据验证和焊接场景优化,确保系统在真实环境中精准可靠。重点讲解了硬件配置、驱动优化、数据一致性验证及焊接应用的特殊处理,为工业自动化开发者提供实用指南。

weixin_28701593的博客 407

NMAKE参考之一——概述

概述 NMAKE需要使用文件的 时间戳 。所谓 时间戳 是指文件最后一次被修改时的时间。大多数操作系统中会时间戳精度为2秒(译注:时间戳的精度取决于文件系统类型,比如FAT格式使用的2s精度,exFAT使用10ms,NTFS使用100ns)。NMAKE会比较目标文件及其依赖文件的时间戳。目标文件是指一个你想要生成的文件,比如一个可执行文件,当然它也可以是一个包含一系列你想要执行的命令的标签。依赖

XanaduT的专栏 1145

HFSS仿真的后处理结果,如何根据天线表面的电流密度分布对天线进行优化?

在HFSS仿真中,天线表面的Jsurf​是最直观、最有价值的诊断工具之一。它不仅告诉你天线“能不能工作”,还能告诉你“为什么工作”以及“哪里出了问题”。

degogmy的博客 1160

微信小程序 实现拼图功能

微信小程序 实现碎片拼图

weixin_45689786的博客 2250

关于windows下使用 cmake 的 nmake 方式构建项目

NMake环境变量配置 正常情况下,安装vs集成开发包时默认用户使用msbuild作为构建工具,虽然也顺带安装了nmake,但是实际上用户不进行一些配置的话,是不能直接使用nmake编译项目的,原因是没有配置环境变量,编译时找不到各种路径,win SDK库\Rtc库路径、头文件路径、甚至编译工具、构建工具路径也找不到。微软想让用户更傻瓜,最好啥原理也不懂,直接用就好。 于是乎,为了可以直接使用...

木易杨的博客 1万+

SystemVerilog从入门到实战

SystemVerilog复合数据类型概述 SystemVerilog增强了Verilog的数据建模能力,提供多种复合数据类型: 数组类型:包括定宽数组(固定大小)、动态数组(运行时分配)和多维数组,支持高效索引访问。 队列:结合数组和链表特性,支持两端快速插入/删除操作,提供push/pop等方法。 关联数组:键值对存储结构,支持稀疏数据存储和快速查找,提供exists/delete等方法。 结构体:组合不同类型数据成员,支持打包(packed)形式以优化存储空间。 枚举类型:为数值赋予语义名称,支持状态

2301_79143213的博客 1227

Windows平台Makefile构建指南:MSYS2、NMake与WSL三种方案详解

Makefile作为经典的构建自动化工具,其核心原理是通过定义文件依赖关系和执行规则来管理编译流程。在Unix-like系统中,Makefile与Shell环境及GCC工具链深度集成,实现了高效的跨模块编译。然而在Windows平台,由于原生缺乏POSIX兼容的Shell环境和GNU工具链,直接运行Makefile面临兼容性挑战,这凸显了跨平台构建工具的技术价值。针对这一需求,开发者通常需要在Windows上搭建兼容层,主要方案包括:通过MSYS2/MinGW-w64提供类Unix环境,使用Visual S

weixin_34082854的博客 435

Vue3 + 高德地图实现车辆电子围栏监控与报警

通过本文的实现,我们完成了一个通用的车辆电子围栏监控功能:支持多种围栏类型。支持进入/离开/双向报警。使用缓存机制避免重复告警。可与Vue3 + 高德地图无缝集成。在实际项目中,可以结合WebSocket 实时定位,实现车辆的实时监控 + 围栏告警系统🚀。

专注于前端开发与实战技巧,记录从零到一的学习与项目经验。分享 Vue3 / JavaScript / TypeScript / Flutter /Uniapp等前端技术,以及 性能优化、工程化、最佳实践。 1035

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

NMAKE makefile内容和功能(1):描述块

描述块构成makefile的核心。它们描述了要创建的目标或文件,以及它们的依赖关系,以及创建目标所需的文件。描述块可以包括描述如何从依赖项创建目标的命令。描述块是一个依赖项行,可以选择后跟一个命令块: targets... : dependents... commands... 依赖行 依赖项行指定一个或多个目标,以及零个或多个依赖项。如果目标不存在,或者其时间戳早于依赖项,则NMAKE将执行命令块中的命令。如果目标是伪目标,NMAKE还会执行命令块。下面是一个依赖关系行示例: hi_bye.ex

haimianjie2012的专栏 276

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

NMAKE简要教程1:环境配置

1. NMAKE初步了解 NMAKE和GNUMake大同小异,但是不能直接划等号,两者Makefile并不通用。 NMAKE是Visual Studio的内置工具之一,只负责执行Makefile中描述的编译链接步骤,本身并不具备编译或链接功能。 2. NMAKE的安装 推荐安装社区版的Visual Studio Community,无版权问题 3. NMAKE运行环境 安装完Visual Studio之后,并不是马上就能使用,还需要简单配置。 最直接的方法就是调用"%YOUR_VS..

qq_38461475的博客 7939

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

makefile简明指南

 先说几句废话以前看书时经常遇到makefile,nmake这几个名词,然后随之而来的就是一大段莫名其妙的代码,把我看得云里雾里的。在图书馆和google上搜了半天,也只能找到一些零零星星的资料,把我一直郁闷得不行。最近因缘巧合,被我搞到了一份传说中的MASM6手册,终于揭开了NMAKE的庐山真面目。想到那些可能正遭受着同样苦难的同志以及那些看到E文就头晕的兄弟,所以就写了这篇文章。假如大

peterxin's blog 1878

Windows平台运行Makefile的三种实用方法:MinGW、NMake与VS Code集成

Makefile作为经典的自动化构建工具,在类Unix系统中通过定义依赖关系和构建规则,极大地简化了C/C++项目的编译流程。其核心原理在于利用时间戳对比,仅重新编译发生变更的源文件,从而提升构建效率。在跨平台开发场景下,这一技术价值尤为凸显,能够确保不同环境下的构建一致性。然而,当项目迁移至Windows平台时,由于原生环境缺乏make工具以及路径、命令的差异,直接运行为Unix-like环境设计的Makefile会遇到障碍。本文聚焦于解决这一工程实践痛点,系统介绍了三种主流方案:通过MinGW/MSYS

weixin_30731305的博客 356

nmake inside: Makefile的结构

    nmake是微软的make工具,用来管理多文件的c++工程。基本的使用方法是            nmake /F  makefile_name  target_name    如果没有指定/F选项,nmake就在当前目录下查找名为makefile的文件;如果不指定target的话nmake会使用makefile中的缺省target。    一个makefile由Discription

kittyhawk_bj的专栏 486

libzimg在MSVC的移植,nmake的使用记录

nmake移植libzimg

拖拖拉拉的册子 621

NMAKE 详解(整理转载)

先说几句废话   以前看书时经常遇到makefile,nmake这几个名词,然后随之而来的就是一大段莫名其妙的代码,把我看得云里雾里的。在图书馆和google上搜了半天,也只能找到一些零零星星的资料,把我一直郁闷得不行。最近因缘巧合,被我搞到了一份传说中的MASM6手册,终于揭开了NMAKE的庐山真面目。想到那些可能正遭受着同样苦难的同志以及那些看到E文就头晕的兄弟,所以就写了这篇文章。

平凡者的专栏 7654

NMake的原理及使用

makefile入门(转) 1 makefile入门Windows CE的构建系统大量使用了Nmake工具和makfile。在大多数微软的软件和驱动开发包中都会包含Nmake工具。因此,这里有必要介绍一下makefile和Nmake工具。1.1 makefile简介对于许多Windows下的程序员来说,makefile可能还是个陌生的名词。因为Windows下

2715

makefile

Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 <!-- /* Sty

野渡无人 1628

c++程序手动编译理论以及使用qmake+nmake编译示例

qmake+nmake编译

weixin_44795474的博客 1115

关于NMAKE

关于NMAKEMicrosoft Program Maintenance Utility,外号NMAKE,顾名思义,是用来管理程序的工具。其实说白了,就是一个解释程序。它处理一种叫做makefile的文件(以mak为后缀),解释里面的语句并执行相应的指令。我们编写makefile文件,按照规定的语法描述文件之间的依赖关系,以及与该依赖关系相关联的一系列操作。然后在调用NMAKE时,它会检查所有

cl_gamer的专栏 2109
上一篇: windows下查看短文件名的方法
下一篇: keil C51脚本编译
obins_Iee
博客等级 码龄15年 217粉丝 91原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值