青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

拂曉·明月·彎刀

觀望,等待只能讓出現的機會白白溜走

  C++博客 :: 首頁 ::  :: 聯系 :: 聚合  :: 管理 ::

簡介

大家已經習慣于微軟提供的功能強大的IDE,已經很少考慮手動編連項目了,所謂技多不壓身,有空的時候還是隨我一塊了解一下命令行編譯。

C/C++/VC++程序員或有Unix/Linux編程經驗應該很熟悉,以前我曾寫過一篇文章描述用csc/vbc來進行命令行編譯,今天再介紹一下MS提供的更加快捷有效的編譯工具NMake。

MSDN的描述: Microsoft 程序維護實用工具 (NMAKE.EXE) 是一個 32 位,基于說明文件中包含的命令生成項目的工具。

NMake具有豐富的選項,可以完成復雜編譯操作。它可以辨別源代碼的改動,并選擇性的編譯,為你節省大量不必要的編譯時間。

使用NMAKE

語法:NMAKE [options] [macros] [targets] [@commandfile]

說明:其中,options是NMAKE的選項,macros是在命令行中的宏定義,targets是NMAKE的目標文件列表,commandfile是包含命令行輸入的文本文件(或響應文件)。

NMAKE 使用指定 /F 選項的Makefile(生成文件,通常名字是makefile);如果未指定 /F 選項,則使用當前目錄下的Makefile。如果未指定Makefile,則 NMAKE 使用推理規則生成命令行 targets。

NMake本身很簡單,與NMAKE配合的是Makefile。Makefile的語法比較復雜,通常需要開發者自己手動編寫Makefile,下一節我們詳細講解Makefile。

上面的options和macros做了MSDN的鏈接,內容較多,請自己查詢相關頁,可以從這里進入NMake的MSDN幫助頁面,在線幫助點這里

編寫MAKEFILE

注:本節內容來自MSDN,熟悉此節的朋友可以直接跳過

Makefile的組成部分包括:成文件包含:

a.描述塊

描述塊是后面可跟有命令塊的依賴項行:

    targets... : dependents...
commands...

依賴項行指定一或多個目標以及零或多個依賴項。目標必須位于行首。用冒號 (:) 將目標和依賴項分開;允許使用空格或制表符。若要拆分行,請在目標或依賴項后面使用反斜杠 (\ )。如果目標不存在、目標的時間戳比依賴項早或者目標是偽目標,則 NMAKE 執行命令。如果某依賴項是其他地方的目標,并且不存在或對于自己的依賴項已過期,則 NMAKE 在更新當前依賴項之前更新該依賴項。

b.命令

如果依賴項已過期,則描述塊或推理規則指定要運行的命令塊。NMAKE 在運行命令之前顯示每個命令,除非使用了 /S 選項、.SILENT!CMDSWITCHES 或 @。如果描述塊后面沒有緊跟命令塊,NMAKE 將查找匹配的推理規則。

命令塊包含一個或多個命令,每個命令位于各自的命令行上。在依賴項(或規則)和命令塊之間不能出現空行。但是可以出現只包含空格或制表符的行;該行被解釋為空命令,并且不出現錯誤。命令行之間允許有空行。

命令行以一個或多個空格或制表符開始。后面緊跟著換行符的反斜杠 ( \ ) 在命令中被解釋為空格;在行尾使用反斜杠繼續下一行命令。如果反斜杠后緊跟有其他任何字符(包括空格或制表符),則 NMAKE 按原義解釋反斜杠。

無論后面是否緊跟有命令塊,前面帶分號 (;) 的命令可以出現在依賴項行上或推理規則中:

project.obj : project.c project.h ; cl /c project.c

c.宏

宏用另一個字符串替換生成文件中的特定字符串。使用宏可以:

  • 創建可生成不同項目的生成文件。
  • 指定命令選項。
  • 設置環境變量。

可以定義您自己的宏或使用 NMAKE 的預定義宏。

d.推理規則

推理規則提供命令來更新目標并推理目標的依賴項。推理規則中的擴展名與具有相同基名稱的單個目標和依賴項匹配。推理規則是用戶定義的,或預定義的;預定義的規則可以重新定義。

如果過期的依賴項沒有命令,并且如果 .SUFFIXES 包含依賴項的擴展名,則 NMAKE 使用其擴展名與當前或指定目錄中的目標和現有文件匹配的規則。如果有多個規則與現有文件匹配,.SUFFIXES 列表將確定使用哪一個規則;列表優先級從左向右按降序排列。如果依賴文件不存在,并且未在另一個描述塊中作為目標列出,則推理規則可以從具有相同基名稱的另一個文件創建缺少的依賴項。如果描述塊的目標沒有依賴項或命令,推理規則可以更新目標。即使不存在描述塊,推理規則也可以生成命令行目標。即使指定了顯式依賴項,NMAKE 也可以調用推理依賴項的規則。

e.點指令

在描述塊之外的行首指定點指令。點指令以句點 ( . ) 開始,后面跟一個冒號 (:)。允許使用空格或制表符。點指令名區分大小寫并且應為大寫。

指令 作用
.IGNORE : 忽略從指定該指令的位置到生成文件末尾之間,由命令返回的非零退出代碼。默認情況下,如果命令返回非零退出代碼,NMAKE 將暫停。若要還原錯誤檢查,請使用 !CMDSWITCHES。若要忽略單個命令的退出代碼,請使用短劃線 (-) 修飾符。若要忽略整個文件的退出代碼,請使用 /I 選項。
.PRECIOUS : targets 若更新 targets 的命令暫停,則將 targets 保留在磁盤上;若命令通過刪除文件處理中斷,則該指令無效。用一或多個空格或制表符分隔目標名稱。默認情況下,如果通過使用 CTRL+C 或 CTRL+BREAK 組合鍵中斷生成,NMAKE 將刪除目標。.PRECIOUS 的每一次使用都應用于整個生成文件;多次指定是累計的。
.SILENT : 取消從指定該指令的位置到生成文件末尾之間的已執行命令的顯示。默認情況下,NMAKE 顯示它調用的命令。若要還原回顯,請使用 !CMDSWITCHES。若要取消單個命令的回顯,請使用 @ 修飾符。若要取消整個文件的回顯,請使用 /S 選項。
.SUFFIXES : list 列出推理規則匹配的擴展名;預定義為:.exe .obj .asm .c .cpp .cxx .bas .cbl .for .pas .res .rc。

若要更改 .SUFFIXES 列表順序或指定新列表,請清除此列表并指定新的設置。若要清除此列表,請不要在冒號后指定擴展名:

.SUFFIXES :

若要將其他后綴添加到列表的末尾,請指定

.SUFFIXES : suffixlist

其中 suffixlist 是附加后綴的列表,由一或多個空格或制表符分隔。若要查看 .SUFFIXES 的當前設置,請運行選項為 /P 的 NMAKE。

f.預處理指令

可以通過使用預處理指令和表達式控制 NMAKE 會話。預處理指令可以放置在生成文件或 Tools.ini 文件中。使用指令可以有條件地處理生成文件,顯示錯誤信息,包括其他生成文件,取消定義宏以及打開或關閉某些選項。

    Makefile示例

    看了一堆理論,很累了吧?下面看一段簡單的MakeFile

    # 宏定義
                    SOURCES=AssemblyInfo.cs \
                    Form1.cs \
                    Form2.cs \
                    Form3.cs \
                    HelloWorld.cs
                    # 引用規則
                    # 目標:
                    CLRProfiler.exe : $(SOURCES) #<--依賴項
                    # 標志
                    # 下面是命令
                    csc /t:winexe /out:HelloWorld.exe /r:System.Windows.Forms.dll $(SOURCES)
                    clean:
                    del HelloWorld.exe
                    
     

    將上述代碼保存為Makefile(沒有后綴)放在你的項目文件夾下, 然后打開VS2003.NET命令行窗口,進入項目夾所在路徑,打入NMake回車, ok

    示例2

    下面演示一下多個項目時的編譯,每個單獨的項目創建單獨的makefile,解決方案下放一個總的makefile

    all:
                    # 分別對項目進行編譯
                    cd project1
                    nmake
                    cd ..
                    cd project2
                    nmake
                    cd ..
                    cd project3
                    nmake
                    cd ..
                    # 將編譯結果匯總到當前路徑
                    copy project1\project1.dll
                    copy project2\project2.dll
                    copy project3\project3.exe
                    clean:
                    # 清除編譯結果
                    del project1.dll
                    del project2.dll
                    del project3.exe
                    cd project1
                    nmake clean
                    cd ..
                    cd project2
                    nmake clean
                    cd ..
                    cd project3
                    nmake clean
                    cd ..
                    
     

    小節

    本文簡單介紹了NMAKE的用法,并對Makefile的語法做了介紹。篇幅所限,既不能面面俱到,又不能深入剖析,只希望能夠讓更多人了解此工具。筆者也是剛剛接觸,經驗不多,還請各位網友多多拍磚!

    附表(makefile中常用的幾個符號)

    符合 作用
    ^ (caret) 用于關閉某些字符所具有的特殊意義,使其只表示字面上的意義。例如:^#abc表示#abc這個字符串,而#abc則用于在makefile中加入注釋,#在這里為注釋標志,就像C++中的//。另外,在一行的末尾加上^,可以使行尾的回車換行符成為字串的一部分。
    # (number sign) 注釋標志,NMAKE會忽略所有從#開始到下一個換行符之間的所有文本。這里要注意的是:在command lines中不能存在注釋。因為對于command lines,NMAKE是將其整行傳遞給OS的。通常對于command lines的注釋都是放在行與行之間。
    \ (backslash) 用于將兩行合并為一行。將其放在行尾,NMAKE就會將行尾的回車換行符解釋為空格(space)。
    % (percent symbol) 表示其后的字符串為一文件名。
    ( (left parentheses)
    ) (right parentheses)
    {
    }
    ! (exclamation symbol) 命令修飾符
    @ (at sign) 命令修飾符
    - (hyphen)
    : (colon) 用于dependent lines和inference rules中,用于分隔target和dependent。
    ; (semicolon) 如果對于一個dependent line只有一條命令,則可以將該命令放在dependent line的后面,二者之間用“;”分隔。
    $ (dolor sign) 用于調用宏

    posted on 2008-02-26 09:00 一路風塵 閱讀(10403) 評論(0)  編輯 收藏 引用 所屬分類: 轉載
    青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲男女毛片无遮挡| 亚洲一级免费视频| 久久综合久久久久88| 久久国产精品久久久久久| 国产在线精品二区| 男女视频一区二区| 欧美精品日韩| 亚洲午夜一二三区视频| 亚洲欧美在线另类| 国内自拍亚洲| 亚洲国产一区二区a毛片| 欧美成人免费在线观看| 一区二区免费在线播放| 亚洲欧美日韩一区| 亚洲国产成人av在线| 91久久精品国产91久久| 欧美午夜免费| 久久蜜桃精品| 欧美日韩激情小视频| 欧美在线999| 免费观看不卡av| 午夜电影亚洲| 美女网站在线免费欧美精品| 亚洲一区二区三区在线视频| 久久精品99国产精品| av成人免费| 欧美伊久线香蕉线新在线| 亚洲日韩成人| 性色av香蕉一区二区| 日韩视频专区| 久久精品在线| 亚洲中无吗在线| 免费一区二区三区| 久久成人综合视频| 欧美日韩在线播放三区| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美久久电影| 免费成人网www| 国产精品亚发布| 亚洲人成在线观看网站高清| 国产日韩欧美夫妻视频在线观看| 亚洲国产天堂网精品网站| 国产亚洲一区二区三区| 一区二区三区回区在观看免费视频| 国语自产精品视频在线看| 亚洲视频碰碰| 亚洲视频观看| 欧美精品色一区二区三区| 免费观看欧美在线视频的网站| 国产精品视频一区二区高潮| 日韩视频免费看| 亚洲欧洲精品一区二区三区波多野1战4| 亚洲女性裸体视频| 亚洲欧美激情一区| 欧美日韩在线不卡一区| 亚洲精品日本| 日韩视频精品| 欧美国产欧美综合| 亚洲国产精品va在线看黑人| 在线观看日韩欧美| 久久伊伊香蕉| 欧美高清视频在线观看| 在线日韩av片| 美女网站在线免费欧美精品| 嫩草国产精品入口| 亚洲国产精品毛片| 欧美粗暴jizz性欧美20| 亚洲精品1区| 99www免费人成精品| 欧美精品尤物在线| 夜色激情一区二区| 亚洲欧美日韩中文播放| 国产毛片精品国产一区二区三区| 亚洲视频欧洲视频| 欧美在线国产| 经典三级久久| 欧美暴力喷水在线| 亚洲乱亚洲高清| 亚洲欧美乱综合| 国产一区二区高清| 久久天天躁狠狠躁夜夜爽蜜月| 美女精品在线| 亚洲欧洲一二三| 欧美日韩成人精品| 亚洲影院在线| 你懂的网址国产 欧美| 亚洲欧洲日韩综合二区| 欧美日韩精品系列| 亚洲综合999| 欧美成人乱码一区二区三区| 夜夜嗨av色综合久久久综合网| 国产精品国产三级欧美二区| 欧美在线www| 亚洲经典在线| 久久国产一区| 亚洲人成网在线播放| 国产精品二区影院| 久久网站免费| 亚洲视频免费在线| 欧美激情一区二区三区成人| 亚洲精品综合精品自拍| 欧美一区二区三区另类| 亚洲国产精品毛片| 国产精品日产欧美久久久久| 久久综合久久美利坚合众国| 一区二区三区蜜桃网| 猛男gaygay欧美视频| 亚洲欧美色婷婷| 最新成人av网站| 国产人成一区二区三区影院| 欧美成人一区二区三区片免费| 亚洲专区欧美专区| 亚洲精品国产精品乱码不99| 久久久久久穴| 亚洲一区日本| 99视频精品| 亚洲激情女人| 国产综合第一页| 国产精品国产三级国产普通话蜜臀| 欧美专区18| 亚洲一区二区高清视频| 91久久久一线二线三线品牌| 久热这里只精品99re8久| 亚洲欧美日韩国产一区二区| 亚洲美女免费精品视频在线观看| 好吊色欧美一区二区三区四区| 国产精品久久久久久久久搜平片| 欧美大色视频| 久久综合色8888| 久久精品中文字幕一区| 午夜精品久久久久久久男人的天堂| 欧美日韩视频免费播放| 久久久精品一区| 欧美一区二区三区在线看| 亚洲一区免费观看| 一区二区三区精品| 日韩视频免费看| 亚洲理伦在线| 99在线精品视频在线观看| 亚洲欧洲一区| 亚洲人体一区| 亚洲精品在线视频| 亚洲精品美女| av成人国产| 亚洲天堂黄色| 午夜欧美精品久久久久久久| 亚洲免费一在线| 亚洲欧美日韩国产中文| 亚洲欧美日韩国产一区| 亚洲欧美综合| 久久九九99| 美女久久一区| 欧美精品一区二区精品网| 欧美日韩国产大片| 欧美日韩系列| 国产模特精品视频久久久久| 国产日韩欧美一区在线| 黄色日韩精品| 亚洲三级免费电影| 一区二区三区四区国产| 亚洲欧美日韩中文视频| 久久精品日韩| 国产精品成人一区二区| 国产精品久久久久久久久久妞妞 | 午夜精品视频| 久久成人18免费观看| 蜜桃av一区二区三区| 欧美美女日韩| 国产精品毛片一区二区三区| 国产偷自视频区视频一区二区 | 久久亚洲综合| 欧美啪啪一区| 国产亚洲激情| 91久久夜色精品国产九色| 亚洲综合第一| 美女视频黄a大片欧美| 亚洲美女福利视频网站| 亚洲一级黄色| 蜜臀va亚洲va欧美va天堂| 欧美日韩在线播放三区四区| 国产手机视频一区二区| 91久久久久久久久久久久久| 午夜精品久久久久久久99水蜜桃| 久久人91精品久久久久久不卡| 亚洲国产欧美久久| 午夜免费日韩视频| 欧美精品一区二区三区在线播放 | 国产精品久久久久久久久果冻传媒| 国产一区二区三区在线观看视频 | 一区二区三区成人精品| 久久一区精品| 国产精品私房写真福利视频| 在线观看亚洲一区| 欧美一区二区三区四区在线观看 | 欧美综合国产| 国产精品久久久久77777| 亚洲国产日韩欧美综合久久| 欧美一区三区三区高中清蜜桃| 亚洲黄网站黄| 久久夜色精品国产噜噜av|