zoukankan      html  css  js  c++  java
  • nmake学习笔记

    1、命令行中调用nmake的基本语法:

    namke /f  makefile /x stderrfile  [macrodefs] [targets]

    其中makefile为makefile文件,/x stderrfile为可选参数,即把nmake错误存储到文件stderrfile。

    2、makefile的主要语法:

    2.1 注释

          makefile的注释以#开头,如:

          # Usage: NMAKE CLEAN (removes all intermediary files)
          # or: NMAKE options (builds one library variant (see below))

    2.2 宏

         Makefile的一个重要组成部分是宏。Makefile中的宏和C语言的中宏类似,其实质就是字符串替换。其语法很简单,如下:

         macro name =  macro value 

         直译就是宏名 =  宏的值 

         VS预定义了很多宏,如OUTDIR,你可以在你的Makefile重新定义这些宏以覆盖原来的值。

         宏可以使用环境变量,如你的系统有一个OPEN_SOURCE的环境变量,然后你可以这样定义宏:

         THIRD_PARTY  =  $(OPEN_SOURCE)

         宏的引用用法是 $(宏名)。

    2.3 预处理指令

          Makefile的预处理指令和C语言的预处理指令类似,其常用指令如下:

          !ERROR string      ——    显示错误“string”, 然后停止执行,错误代码为U1050

          !MESSAGE string  ——   显示字符串,这个一般用于信息显示C语言的#pragma message

          !INCLUDE [<]filename[>] —— 包含makefile。

          !IF const ——  如果成立(非零),则处理!F和下一个!ELSE或!ENDIF之间的语句

          还有诸如!IFDEF macroname、!IFNDEF macroname、!ELSE、!ELSEIF、!ELSEIFDEF、!ELSEIFNDEF、!ENDIF和C语言的#if之类的指令的意义是一致的.

    2.4 描述块

         基本语法:

         目标:依赖项

           命令

    3、示例

        新建名为ConsoleTest的控制台程序,在ConsoleTest目录下新建名为ConsoleTest.vc的文件,用记事本输入:

        

    all: ConsoleTest.exe
    # compile
    stdafx.obj: stdafx.cpp
    	cl -c -D_X86=1 -DWIN32 -D_DEBUG -D_CONSOLE -Istdafx.h stdafx.cpp
    
    ConsoleTest.obj: ConsoleTest.cpp stdafx.obj
    	cl -c -D_X86=1 -DWIN32 -D_DEBUG -D_CONSOLE -Istdafx.h ConsoleTest.cpp
    
    # link
    ConsoleTest.exe: ConsoleTest.obj
    	link /INCREMENTAL:YES /NOLOGO /subsystem:console /out:ConsoleTest.exe ConsoleTest.obj kernel32.lib
    
    clean:
    	@-if exist *.obj del *.obj
    

      cl和link简述:

    cl的一些常用选项:

    -c: 编译但不链接

    -D: 定义预处理器,如-D_X86=1:指定在x86平台上编译,-D_DEBUG:定义预处理器_DEBUG,

    -I:包含的头文件

    cl的最后一个参数是所编译的文件。

    link的一些常用选项:

    /INCREMENTAL:是否启用增量链接,YES为启用,NO为不启用,

    /NOLOGO: 取消显示启动版权标志

    /SUBSYSTEM:指定子系统,在PC桌面程序上一般是两个选项:console(控制台程序)和WINDOWS(非控制台程序)。

    /out: 指定输出的文件。

    link最后的参数是需要链接的obj文件和库文件。

    clean下面的@-if指令可以这么写:-if,其运行结果是一样的,但是有命令的回显。另外直接写成:if,也可以执行。

  • 相关阅读:
    uva 11248 最大流 ISAP
    【力扣】133. 克隆图
    【力扣】125. 验证回文串
    【力扣】130. 被围绕的区域
    【力扣】337. 打家劫舍 III
    【力扣】104. 二叉树的最大深度-及二叉树的遍历方式
    【力扣】392. 判断子序列
    【力扣】95. 不同的二叉搜索树 II
    【力扣】120. 三角形最小路径和
    【力扣】两个数组的交集 II
  • 原文地址:https://www.cnblogs.com/licb/p/3926661.html
Copyright © 2011-2022 走看看