2013-06-12 41 views
3

使用Flex,在使用的條件編譯中創建了一個桌面和Web應用程序。它運行成功。現在,我希望爲桌面和網絡提供單個swc文件。因此創建了滿足該條件的圖書館項目。雖然在flex庫項目中使用條件編譯得到許多問題,如衝突變量名稱和重複函數等等,這是我在使用沒有使用swc文件的flex項目時所面臨的問題。Flex條件編譯 - 是否可以在flex庫項目中進行條件編譯?

所以現在的問題就出現了:是否有可能在flex庫項目上進行條件編譯?

+0

你的錯誤是什麼?請明確點。一些代碼審查/代碼共享也可能對此有所幫助。 – JeffryHouser

回答

1

編譯SWC時,可以通過傳遞參數-define來指定編譯常量。然而,這隻會包含您使用該常數添加的任何代碼 - 即,您不能在包含SWC的項目中重置常量以獲得不同的結果。

以下是用於創建SWC的bat文件的代碼。將其複製到新文件中,並使用擴展名.bat保存。根據需要替換文件路徑。

@echo off 

set flexroot=D:\Program Files\FlashDevelop\Tools\flexsdk\ 
set proj=D:\Dev\TestSWC\ 

cd %flexroot%bin\ 
compc.exe -source-path %proj%src -is %proj%src -optimize -define CONFIG::debug false -define CONFIG::release true -output %proj%bin\TestSWC.swc 

pause 

我用這個來構建一個包含單個類SWC文件,像這樣:

package 
{ 
    public class TestClass 
    { 

     public function sayHello():void 
     { 
      CONFIG::debug 
      { 
       trace("Hello debug"); 
      } 
      CONFIG::release 
      { 
       trace("Hello release"); 
      } 
     } 

    } 

} 

然後,我創建了另一個項目,包括深港西部通道和CONFIG ::調試標誌設置爲true,並調用sayHello()函數。它跟蹤"Hello release",因爲SWC是使用CONFIG :: release標誌編譯爲true

+0

注意:從你看起來你想要做的事情來看,最好將源代碼作爲外部源代碼目錄而不是swc。這樣,它就是最終項目中定義的常量,用於確定添加或刪除的代碼 – divillysausages

0

引述docs

的mxmlc編譯,您可以在編譯時通過常量的值來應用

它沒有提到compc命令,所以我敢肯定它是不可能。我也想知道在編譯過程中如何包含/排除部分代碼,這在技術上會起作用。已編譯的SWC將不再包含條件代碼。

+0

你沒有收到你的報價。但是,「組件編譯器可以採用大部分應用程序編譯器選項」http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf69084-7a80.html。爲什麼組件編譯器不支持條件編譯? [我從來沒有嘗試過,雖然] – JeffryHouser

+0

謝謝,我補充說。條件編譯文檔明確地位於「使用mxmlc,應用程序編譯器」下。正如我在我的回答中提到的,我不明白這在技術上如何工作。 –

+0

SWC仍然被編譯。我曾經與一家計劃使用條件編譯作爲其SWC上水印方案一部分的組件供應商進行了交流;所以他們可以分發像Flextras這樣的「開發者版本」。但是,老實說,我從來沒有嘗試過。 IT聽起來像@divillysausages有一個工作的例子... – JeffryHouser