各平臺(tái)編譯器中的Pre-build及Post-build操作

@[ide|build event]
通常我們?cè)诰幾g一個(gè)工程或是鏈接庫(kù)的時(shí)候蛹批,需要在編譯鏈接之前或者編譯鏈接之后執(zhí)行一些操作,比如:拷貝一些第三方庫(kù)到工程的工作目錄下或執(zhí)行一些批處理(shell)操作篮愉,這個(gè)時(shí)候就需要在編譯器環(huán)境中進(jìn)行相關(guān)設(shè)置:

Visual Studio####

說明: 在vs2005以及以上都支持了Build Events, 同時(shí)可以支持多行命令.
而在vs2003中要想執(zhí)行多行命令腐芍,只能把命令寫在一個(gè)批處理文件中,然后通過調(diào)用批處理來執(zhí)行.

  • 打開Build Events方框步驟:
    1.右鍵單擊Solution Explorer试躏,選擇Properties
    2.選擇Build Events猪勇,可以看到Pre-build 和Post-build,以及運(yùn)行Post-build event 的條件

  • 可以在相應(yīng)的編譯事件中添加以下常用操作:
    1.build完后修改build產(chǎn)物的名字(后綴),并覆蓋已有的同名文件.
    copy /y $(TargetFileName) $(TargetName).XXX
    2.調(diào)用外部命令或批處理:
    call "C:\Program Files\XXX.exe"
    3.條件判斷:
    IF NOT $(ConfigurationName) == Release GOTO end call "C:\Program Files\XXX.exe" $(ProjectDir)$(TargetName).cvp :end
    4.web project 自動(dòng)部署
    copy $(TargetDir)*.* //MyServer/MyService/bin copy $(ProjectDir)*.ascx //MyServer/MyService
    5.拷貝文件到制定目錄
    copy "$(ProjectDir)pri.bin" "$(SolutionDir)$(SolutionName)\$(OutDir)"

xcode####

  1. 選擇項(xiàng)目TARGETS颠蕴,進(jìn)入Build Phases頁面
  2. 點(diǎn)擊“+”按鈕泣刹,選擇“New Run Script Phase”
  3. 在Shell選框中填入使用的bash版本,默認(rèn)是/bin/sh
  4. 在接下來的方框中編寫想要執(zhí)行的shell命令(支持所有shell命令)
  5. 如果是想建立編譯前事件犀被,需將Run Script用鼠標(biāo)拖動(dòng)到Compile Sources之前椅您,若是建立編譯后事件,則保證Run Script在最后即可

CMake####

在CMake中提供了add_custom_command和add_custom_target用來為某個(gè)目標(biāo)或庫(kù)添加一些自定義命令寡键,該命令本身會(huì)成為目標(biāo)的一部分掀泳,僅在目標(biāo)本身被構(gòu)建時(shí)才會(huì)執(zhí)行。如果該目標(biāo)已經(jīng)構(gòu)建西轩,命令將不會(huì)執(zhí)行员舵。

  • add_custom_command: 增加自定義的構(gòu)建規(guī)則到生成的構(gòu)建系統(tǒng)中
add_custom_command(TARGET target
                     PRE_BUILD | PRE_LINK| POST_BUILD
                     COMMAND command1[ARGS] [args1...]
                     [COMMAND command2[ARGS] [args2...] ...]
                     [WORKING_DIRECTORYdir]
                     [COMMENT comment][VERBATIM])

命令執(zhí)行的時(shí)機(jī)由如下參數(shù)決定:
1.PRE_BUILD - 命令將會(huì)在其他依賴項(xiàng)執(zhí)行前執(zhí)行
2.PRE_LINK - 命令將會(huì)在其他依賴項(xiàng)執(zhí)行完后執(zhí)行
3.POST_BUILD - 命令將會(huì)在目標(biāo)構(gòu)建完后執(zhí)行。

  • add_custom_target: 增加一個(gè)沒有輸出的目標(biāo)藕畔,使得它總是被構(gòu)建
add_custom_target(Name [ALL][command1 [args1...]]
                    [COMMAND command2 [args2...] ...]
                    [DEPENDS depend depend depend ... ]
                    [WORKING_DIRECTORY dir]
                    [COMMENT comment] [VERBATIM]
                    [SOURCES src1 [src2...]])

增加一個(gè)指定名字的目標(biāo)马僻,并執(zhí)行指定的命令。該目標(biāo)沒有輸出文件注服,總是被認(rèn)為是過期的韭邓,即使是在試圖用目標(biāo)的名字創(chuàng)建一個(gè)文件措近。如果指定了ALL選項(xiàng),那就表明該目標(biāo)會(huì)被添加到默認(rèn)的構(gòu)建目標(biāo)仍秤,使得它每次都被運(yùn)行。

關(guān)于以上兩個(gè)編譯命令的具體用法可很,可以參考以下鏈接:CMake客制化命令

例子(在CMake文件中任意位置添加):

ADD_CUSTOM_TARGET(
    TestExample ALL
)
ADD_CUSTOM_COMMAND(TARGET TestExample
        PRE_BUILD
        COMMAND chmod 700 /home/chenjs/test
        COMMAND /home/chenjs/test -c -o ../../output ../../input/test.txt
        COMMENT "Generate project output file" 
)

Jni環(huán)境下的Android.mk####

在使用NDK為Android項(xiàng)目編譯CPP庫(kù)時(shí)诗力,可以直接在Android.mk中添加執(zhí)行Shell命令,需要注意的是在Cywin以及在Linux下編譯的不同點(diǎn)我抠,并對(duì)兩個(gè)平臺(tái)區(qū)別對(duì)待處理
例子(在Android.mk文件中正確添加):

ifndef SYSENV
    SYSENV := $(shell uname)
endif
ifeq (CYGWIN,$(findstring CYGWIN,$(SYSENV)))
    $(info Generate project output file under cywin)
    $(shell ../../tools/test.exe -c -o ../../output ../../output ../../input/test.txt)
else ifeq ($(SYSENV), Linux)
    $(info Generate project output file under linux)
    $(shell chmod 700 /home/chenjs/test)
    $(shell /home/chenjs/test -c -o ../../output ../../input/test.txt)
endif

參考鏈接:
MSDN build events
Visual Studio build event使用方法
CMake客制化命令
Android.mk中條用shell bash命令
Android.mk詳解

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末苇本,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子菜拓,更是在濱河造成了極大的恐慌瓣窄,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纳鼎,死亡現(xiàn)場(chǎng)離奇詭異俺夕,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)贱鄙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門劝贸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人逗宁,你說我怎么就攤上這事映九。” “怎么了瞎颗?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵件甥,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我哼拔,道長(zhǎng)引有,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任倦逐,我火速辦了婚禮轿曙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘僻孝。我一直安慰自己导帝,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布穿铆。 她就那樣靜靜地躺著您单,像睡著了一般。 火紅的嫁衣襯著肌膚如雪荞雏。 梳的紋絲不亂的頭發(fā)上虐秦,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天平酿,我揣著相機(jī)與錄音,去河邊找鬼。 笑死谎痢,一個(gè)胖子當(dāng)著我的面吹牛剖淀,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播幸逆,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼暮现!你這毒婦竟也來了还绘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤栖袋,失蹤者是張志新(化名)和其女友劉穎拍顷,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體塘幅,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡昔案,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了电媳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片爱沟。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖匆背,靈堂內(nèi)的尸體忽然破棺而出呼伸,到底是詐尸還是另有隱情,我是刑警寧澤钝尸,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布括享,位于F島的核電站,受9級(jí)特大地震影響珍促,放射性物質(zhì)發(fā)生泄漏铃辖。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一猪叙、第九天 我趴在偏房一處隱蔽的房頂上張望娇斩。 院中可真熱鬧,春花似錦穴翩、人聲如沸犬第。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽歉嗓。三九已至,卻和暖如春背蟆,著一層夾襖步出監(jiān)牢的瞬間鉴分,已是汗流浹背哮幢。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留志珍,地道東北人橙垢。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像伦糯,于是被迫代替她去往敵國(guó)和親柜某。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容

  • 本篇文章旨在簡(jiǎn)介 Android 中 NDK 是什么以及重點(diǎn)講解最新 Android Studio 編譯工具 CM...
    Tsy遠(yuǎn)閱讀 63,184評(píng)論 20 213
  • CMake學(xué)習(xí) 本篇分享一下有關(guān)CMake的一些學(xué)習(xí)心得以及相關(guān)使用舔株。 本文目錄如下: [1莺琳、CMake介紹] [...
    AlphaGL閱讀 12,224評(píng)論 11 79
  • 1:InputChannel提供函數(shù)創(chuàng)建底層的Pipe對(duì)象 2: 1)客戶端需要新建窗口 2)new ViewRo...
    自由人是工程師閱讀 5,255評(píng)論 0 18
  • 我是日記星球的149號(hào)星寶寶还棱,我叫馬紅彥载慈。正在參加孫老師日記星球輕21天蛻變之旅的寫作訓(xùn)練。這是我寫的原創(chuàng)日記第1...
    馬紅彥閱讀 189評(píng)論 0 0
  • 從他掛電話到現(xiàn)在,時(shí)間已經(jīng)過去20個(gè)小時(shí)琳要,沒有一點(diǎn)兒他的消息寡具。雖然秉從“堅(jiān)持冷戰(zhàn)”到底的精神,實(shí)際上內(nèi)心已經(jīng)翻云覆...
    sweeting_樂閱讀 263評(píng)論 0 1