• <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>

            拂曉·明月·彎刀

            觀望,等待只能讓出現(xiàn)的機會白白溜走

              C++博客 :: 首頁 ::  :: 聯(lián)系 :: 聚合  :: 管理 ::

            簡介

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

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

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

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

            使用NMAKE

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

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

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

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

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

            編寫MAKEFILE

            注:本節(jié)內(nèi)容來自MSDN,熟悉此節(jié)的朋友可以直接跳過

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

            a.描述塊

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

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

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

            b.命令

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

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

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

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

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

            c.宏

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

            • 創(chuàng)建可生成不同項目的生成文件。
            • 指定命令選項。
            • 設(shè)置環(huán)境變量。

            可以定義您自己的宏或使用 NMAKE 的預(yù)定義宏

            d.推理規(guī)則

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

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

            e.點指令

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

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

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

            .SUFFIXES :

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

            .SUFFIXES : suffixlist

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

            f.預(yù)處理指令

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

              Makefile示例

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

              # 宏定義
                              SOURCES=AssemblyInfo.cs \
                              Form1.cs \
                              Form2.cs \
                              Form3.cs \
                              HelloWorld.cs
                              # 引用規(guī)則
                              # 目標:
                              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

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

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

              小節(jié)

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

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

              符合 作用
              ^ (caret) 用于關(guān)閉某些字符所具有的特殊意義,使其只表示字面上的意義。例如:^#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) 用于調(diào)用宏

              posted on 2008-02-26 09:00 一路風(fēng)塵 閱讀(10349) 評論(0)  編輯 收藏 引用 所屬分類: 轉(zhuǎn)載
              国产99久久精品一区二区| 国产福利电影一区二区三区久久老子无码午夜伦不 | 久久精品无码一区二区三区| 久久精品国产亚洲综合色| 丁香久久婷婷国产午夜视频| 久久婷婷是五月综合色狠狠| 亚洲精品99久久久久中文字幕| 无码日韩人妻精品久久蜜桃 | 久久精品国产91久久综合麻豆自制 | 亚洲精品乱码久久久久久按摩| 人妻精品久久无码专区精东影业| 精品无码久久久久久久久久| 久久久久波多野结衣高潮| 99久久国产免费福利| 久久发布国产伦子伦精品| 久久综合色老色| 久久中文娱乐网| 国产精品久久久久久| 亚洲精品综合久久| 国产精品九九久久精品女同亚洲欧美日韩综合区 | 久久亚洲电影| 国产精品日韩深夜福利久久| 久久国产劲爆AV内射—百度| 久久综合给合综合久久| 久久综合久久综合久久| 日韩人妻无码一区二区三区久久| 国产成人综合久久精品尤物| 国产精品久久久久影院嫩草| 人人狠狠综合久久88成人| 合区精品久久久中文字幕一区| 久久亚洲国产成人精品无码区| 日本三级久久网| 久久国产成人精品麻豆| 99精品久久精品一区二区| 久久精品亚洲中文字幕无码麻豆| 综合人妻久久一区二区精品| 久久天天躁狠狠躁夜夜96流白浆| 色偷偷91久久综合噜噜噜噜| 久久久噜噜噜久久| 日本精品久久久久影院日本| 久久久久亚洲精品无码网址|