使用 Flex,在使用条件编译的情况下创建了一个桌面和 Web 应用程序。它运行成功。现在,我想为桌面和网络提供一个 swc 文件。因此创建了满足该条件的库项目。在 flex 库项目中使用条件编译时会遇到许多问题,例如变量名冲突和重复函数等,而我在使用没有 swc 文件的 flex 项目时没有遇到过这些问题。
所以现在出现了一个问题:是否可以在 flex 库项目上进行条件编译?
使用 Flex,在使用条件编译的情况下创建了一个桌面和 Web 应用程序。它运行成功。现在,我想为桌面和网络提供一个 swc 文件。因此创建了满足该条件的库项目。在 flex 库项目中使用条件编译时会遇到许多问题,例如变量名冲突和重复函数等,而我在使用没有 swc 文件的 flex 项目时没有遇到过这些问题。
所以现在出现了一个问题:是否可以在 flex 库项目上进行条件编译?
编译 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
.
引用文档:
mxmlc 编译器允许您在编译时将常量值传递给应用程序
它没有提到compc,所以我很确定这是不可能的。我也想知道这在技术上是如何工作的,因为您在编译期间包含/排除了部分代码。编译后的 SWC 将不再包含条件代码。