【问题标题】:Flex conditional compilation-Is it possible to have conditional compilation in flex library project?Flex 条件编译-flex 库项目中是否可以进行条件编译?
【发布时间】:2013-06-12 10:00:42
【问题描述】:

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

那么现在问题来了:是否可以在 flex 库项目上进行条件编译?

【问题讨论】:

  • 您的错误是什么?请明确点。一些代码审查/代码共享在这里也可能有所帮助。

标签: apache-flex web actionscript swc conditional-compilation


【解决方案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

【讨论】:

  • 注意:从看起来你正在尝试做的事情来看,最好将你的源代码包含为外部源目录而不是 swc。这样,最终项目中定义的 const 决定了添加或删除的代码
【解决方案2】:

引用docs

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

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

【讨论】:

  • 您没有采购报价。但是,“组件编译器可以采用大多数应用程序编译器选项”help.adobe.com/en_US/flex/using/…。为什么组件编译器不支持条件编译? [不过我自己从未尝试过]
  • 谢谢,我添加了来源。条件编译文档明确在“使用 mxmlc,应用程序编译器”下。同样正如我在回答中提到的那样,我看不出这在技术上是如何工作的。
  • SWC 仍然被编译。我曾经与一个组件供应商交谈过,他计划在他们的 SWC 上使用条件编译作为水印方案的一部分。这样他们就可以像过去的 Flextras 那样分发“开发者版本”。但是,老实说,我自己从未尝试过。听起来@divillysausages 有一个工作示例...
  • 是的,我知道这是怎么可能的。我很困惑,因为条件可能不匹配,所以无法在应用程序上使用带有条件编译的 SWC。从源代码编译将是唯一的选择。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-12
  • 2013-11-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多