3

使用 Flex,在使用条件编译的情况下创建了一个桌面和 Web 应用程序。它运行成功。现在,我想为桌面和网络提供一个 swc 文件。因此创建了满足该条件的库项目。在 flex 库项目中使用条件编译时会遇到许多问题,例如变量名冲突和重复函数等,而我在使用没有 swc 文件的 flex 项目时没有遇到过这些问题。

所以现在出现了一个问题:是否可以在 flex 库项目上进行条件编译?

4

2 回答 2

1

编译 SWC 时,您可以通过在-define参数中传递编译常量来指定编译常量。然而,这将只包括您使用该常量添加的任何代码 - 即您不能在包含 SWC 的项目中重置 const 以获得不同的结果。

下面是用于创建 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" );
            }
        }

    }

}

然后我创建了另一个项目,包含 SWC 并将 CONFIG::debug 标志设置为true,并调用该sayHello()函数。它跟踪"Hello release"SWC 是使用 CONFIG::release 标志编译为true.

于 2013-06-12T12:37:41.117 回答
0

引用文档

mxmlc 编译器允许您在编译时将常量值传递给应用程序

它没有提到compc,所以我很确定这是不可能的。我也想知道这在技术上是如何工作的,因为您在编译期间包含/排除了部分代码。编译后的 SWC 将不再包含条件代码。

于 2013-06-12T11:35:31.517 回答