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

拂曉·明月·彎刀

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

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

簡(jiǎn)介

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

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

MSDN的描述: Microsoft 程序維護(hù)實(shí)用工具 (NMAKE.EXE) 是一個(gè) 32 位,基于說(shuō)明文件中包含的命令生成項(xiàng)目的工具。

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

使用NMAKE

語(yǔ)法:NMAKE [options] [macros] [targets] [@commandfile]

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

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

NMake本身很簡(jiǎn)單,與NMAKE配合的是Makefile。Makefile的語(yǔ)法比較復(fù)雜,通常需要開發(fā)者自己手動(dòng)編寫Makefile,下一節(jié)我們?cè)敿?xì)講解Makefile。

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

編寫MAKEFILE

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

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

a.描述塊

描述塊是后面可跟有命令塊的依賴項(xiàng)行:

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

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

b.命令

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

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

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

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

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

c.宏

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

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

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

d.推理規(guī)則

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

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

e.點(diǎn)指令

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

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

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

.SUFFIXES :

若要將其他后綴添加到列表的末尾,請(qǐng)指定

.SUFFIXES : suffixlist

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

f.預(yù)處理指令

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

    Makefile示例

    看了一堆理論,很累了吧?下面看一段簡(jiǎn)單的MakeFile

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

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

    示例2

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

    all:
                    # 分別對(duì)項(xiàng)目進(jìn)行編譯
                    cd project1
                    nmake
                    cd ..
                    cd project2
                    nmake
                    cd ..
                    cd project3
                    nmake
                    cd ..
                    # 將編譯結(jié)果匯總到當(dāng)前路徑
                    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é)

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

    附表(makefile中常用的幾個(gè)符號(hào))

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

    posted on 2008-02-26 09:00 一路風(fēng)塵 閱讀(10382) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 轉(zhuǎn)載
    青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            最新亚洲一区| 亚洲国产1区| 久久精品国产精品亚洲综合| 性视频1819p久久| 欧美电影免费观看| 国产精品视频一区二区高潮| 99国产精品久久久久久久成人热| 亚洲精品一区中文| 国产精品素人视频| 亚洲毛片在线观看.| 久久精品毛片| 宅男噜噜噜66国产日韩在线观看| 免费视频一区| 1024精品一区二区三区| 久久久噜噜噜久久| 亚洲欧美日韩精品久久久久| 国产精品草莓在线免费观看| 亚洲九九精品| 亚洲国产精品一区二区第一页 | 欧美成人午夜| 亚洲国产精品va| 欧美激情第一页xxx| 两个人的视频www国产精品| 在线看无码的免费网站| 欧美国产日韩一区二区| 久久综合九色欧美综合狠狠| 亚洲国产精品毛片| 91久久夜色精品国产网站| 欧美日韩成人一区二区| 亚洲无线一线二线三线区别av| 艳女tv在线观看国产一区| 国产精品捆绑调教| 久久天天躁夜夜躁狠狠躁2022| 久久成人综合视频| 在线日韩欧美视频| 亚洲精品一区二区网址| 国产精品久久久一区麻豆最新章节| 亚洲欧美日韩在线高清直播| 欧美一级专区免费大片| 在线播放国产一区中文字幕剧情欧美 | 香蕉久久夜色| 国内外成人免费激情在线视频| 免费一区视频| 欧美日韩一区精品| 国产欧美一区二区三区久久| 麻豆成人av| 欧美日韩视频不卡| 日韩视频精品在线观看| 夜夜狂射影院欧美极品| 亚洲美女在线观看| 欧美.日韩.国产.一区.二区| 亚洲欧美一区二区三区在线| 欧美人成在线| 欧美成人免费网站| 99国产精品99久久久久久| 久久一区免费| 欧美精品一区二区三区蜜臀 | 欧美人成在线视频| 麻豆精品精华液| 欧美精品一区二区蜜臀亚洲| 亚洲天堂av在线免费观看| 一区二区免费在线观看| 在线观看久久av| 久久一区二区三区国产精品| 亚洲经典一区| 免费在线一区二区| 久久躁狠狠躁夜夜爽| 国产精品爱啪在线线免费观看| 在线视频国内自拍亚洲视频| 久久精品国产久精国产思思| 美女黄网久久| 欧美国产91| 亚洲精品欧美日韩| 欧美日韩综合视频| 亚洲天堂黄色| 亚洲黄色成人网| 亚洲一区二区三区高清| 国产精品久久久一区麻豆最新章节| 一区二区三区成人精品| 伊人成人开心激情综合网| 亚洲视频一区在线观看| 亚洲三级色网| 久久久国产91| 欧美一区二视频在线免费观看| 欧美日本精品| 久久国产精品久久精品国产| 男人天堂欧美日韩| 亚洲高清三级视频| 欧美午夜精品理论片a级按摩 | 欧美日韩一区视频| 新片速递亚洲合集欧美合集| 亚洲国产精品成人综合| 亚洲一区免费观看| 久久久久久久久久久久久久一区| 欧美日产一区二区三区在线观看| 欧美黄色视屏| 亚洲国产裸拍裸体视频在线观看乱了 | 一片黄亚洲嫩模| 欧美大尺度在线| 亚洲电影免费在线| 亚洲精品专区| 欧美日韩亚洲免费| 中文在线不卡视频| 香蕉久久精品日日躁夜夜躁| 国产精品久久午夜| 午夜久久影院| 久久蜜桃资源一区二区老牛 | 中国女人久久久| 欧美午夜免费影院| 亚洲欧美日韩一区在线| 久久精品国产亚洲aⅴ| 国产一区二区三区在线观看免费| 久久精品国产久精国产一老狼 | 在线亚洲成人| 久久精品2019中文字幕| 在线成人av| 欧美巨乳在线| 亚洲午夜一二三区视频| 久久久久天天天天| 亚洲黄色在线观看| 国产精品成人一区| 久久精品成人一区二区三区 | 欧美一级视频免费在线观看| 久久女同互慰一区二区三区| 1769国内精品视频在线播放| 欧美日韩第一页| 亚洲欧美国产另类| 欧美大片一区二区三区| 一区二区三区日韩欧美| 国产三级欧美三级| 免费高清在线一区| 中文av字幕一区| 免费成人毛片| 亚洲午夜电影| 伊人婷婷久久| 欧美午夜免费| 媚黑女一区二区| 亚洲特级片在线| 免费观看成人www动漫视频| 亚洲免费av网站| 久久国产精品亚洲77777| 亚洲国产欧美另类丝袜| 久久国产精品久久久| 国产精品成av人在线视午夜片| 在线观看日韩欧美| 久久综合九九| 久久久久女教师免费一区| 国产精品成人免费| 欧美成人在线影院| 国产女人aaa级久久久级| 久久综合九色综合网站| 在线亚洲欧美视频| 美女国产一区| 午夜影院日韩| 一本一本久久a久久精品综合麻豆| 国产自产2019最新不卡| 欧美视频一区二区三区在线观看 | av成人老司机| 国语自产偷拍精品视频偷| 欧美日韩天堂| 免费不卡在线视频| 欧美在线在线| 一区二区三区精品| 亚洲高清不卡一区| 久久精品一本| 欧美一区二区三区四区夜夜大片| 99精品国产99久久久久久福利| 一区二区三区自拍| 欧美午夜精品理论片a级大开眼界| 欧美精品免费播放| 欧美福利一区| 欧美成人免费在线观看| 久久亚洲精品网站| 久久久91精品国产一区二区三区| 西西裸体人体做爰大胆久久久| 亚洲图片自拍偷拍| 亚洲亚洲精品在线观看| 亚洲午夜激情| 亚洲免费一区二区| 性久久久久久| 欧美在线观看一二区| 午夜精品一区二区三区四区| 亚洲欧美激情一区| 欧美在线观看网址综合| 久久人人97超碰精品888| 久久露脸国产精品| 麻豆精品视频在线| 免费试看一区| 欧美日韩免费精品| 国产精品区二区三区日本| 国产精品综合久久久| 国产一区二区三区高清在线观看 | 久久久噜噜噜久久中文字幕色伊伊| 欧美在线电影| 麻豆成人精品| 亚洲精品美女| 亚洲午夜久久久久久久久电影网| 亚洲性图久久| 久久精品亚洲一区二区三区浴池| 久久资源av|