为什么我的ifndef部分不起作用?

时间:2012-04-10 13:28:14

标签: wix conditional-compilation

我的program.wxs文件中有以下代码段:

<?ifndef $(var.TwoOnly) ?>
        <Feature Id="FeatureOne" ... >
          ...
        </Feature>
<?endif ?>

<?ifndef $(var.OneOnly) ?>
        <Feature Id="FeatureTwo" ... >
          ...
        </Feature>
<?endif ?>

我正在使用以下命令编译它:

candle -dOneOnly=1 program.wxs

查看已编译的program.wixobj,我可以看到Feature Two的声明全部存在,并且在运行light后,列出了这两个功能,并且安装程序的功能与OneOnly完全相同}或TwoOnly已设置。为什么我的ifndef块无法正常工作?

注意:我还有以下内容:

<?ifdef $(var.OneOnly) ?>
  <?define productName = One Only ?>
<?else?>
  <?ifdef $(var.TwoOnly) ?>
    <?define productName = Two Only ?>
  <?else?>
    <?define productName = Both ?>
  <?endif?>
<?endif?>

即使在编译期间设置OneOnly,该名称也会显示为Both

修改

我已将条件的复杂性降低到the documentation中显示的最小情况:

<?ifndef $(var.TwoOnly) ?>
  <?include featureOne.wxi ?>
<?endif?>

这仍然不起作用。

1 个答案:

答案 0 :(得分:7)

使用ifdefifndef时,必须在没有 $(var.)语法的情况下声明变量。

<?ifndef TwoOnly ?>
  <?include featureOne.wxi ?>
<?endif?>

这很有效。