delphi - 我可以在 msbuild 命令行中添加条件定义吗?

标签 delphi msbuild delphi-xe2

我有以下示例代码:

program boohoo;

{$APPTYPE CONSOLE}

{$IFDEF boo}
{$MESSAGE warn 'boo'}
{$ENDIF}

{$IFDEF hoo}
{$MESSAGE warn 'hoo'}
{$ENDIF}

begin
end.

在项目选项中定义了条件 boo。我希望能够添加条件 hoo 作为我的 msbuild 命令行的一部分。

我已经尝试过这样的:

msbuild boohoo.dproj /p:Config=Release;DCC_Define="$(DCC_Define);hoo"

输出显示 hoo,但不显示 boo。当我使用详细输出查看 dcc32 命令时,我看到

-D$;hoo

显然我可以这样做:

msbuild boohoo.dproj /p:Config=Release;DCC_Define="boo;hoo"

但自然地,我想使用项目选项中声明的任何条件加上我在命令行上指定的内容。

有什么方法可以让我引用底层配置中的值来指定此属性吗?

最佳答案

免责声明:我自己还没有使用 MsBuild,所有内容均取自文档和一些 IDE 实验

根据 MsBuild 命令行引用 ( http://msdn.microsoft.com/en-us/library/ms164311.aspx ):

/property:name=value

Sets or overrides these project-level properties, where name is the property name and value is the property value. Use a semicolon or a comma to separate multiple properties, or specify each property separately. /p is also acceptable. For example: /property:WarningLevel=2;OutputDir=bin\Debug

您可以对属性值执行的所有操作都是设置或覆盖。从项目文件添加属性值要么是不可能的,要么是隐藏功能的情况。

但我想您可以做的是在 dproj 文件中定义一个自定义属性,并使用“”作为默认值:

<PropertyGroup>
  <ExtraDefines> </ExtraDefines>
</PropertyGroup>

在定义语句中引用该内容

<DCC_Define>DUNIT;$(ExtraDefines);$(DCC_Define)</DCC_Define>

在 IDE 中应为 DUNIT;$(ExtraDefines)

然后在命令行中指定它:

msbuild boohoo.dproj /p:Config=Release;ExtraDefines="hoo"

我确实使用 IDE 测试将 $(ExtraDefines) 添加到项目的“包含”选项中。至少这并没有让我感到恶心,即使没有在 dproj 中定义该选项。 IDE 由此生成的命令行是:

...rad studio\7.0\bin\dcc32.exe --no-config -B -Q -DDEBUG;DUNIT; -E....

这似乎表明 $(ExtraDefines) 已被淘汰,因为它没有任何值(value)。并且应该使用 MSBuild 来获取它并在命令行上指定一个值。

关于delphi - 我可以在 msbuild 命令行中添加条件定义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8507372/

相关文章:

arrays - 动态数组与静态数组有何不同?

delphi - 如何将字符串转换为TPenStyle?

delphi - 为什么在通过元类类工厂实例化时不调用派生构造函数?

c# - 使用 MSBuild 从命令行定义预处理器值

visual-studio-2008 - 为什么 MSBuild 只使用一个内核,而 VS.NET 用完同一个 .sln 上所有可用的内核?

delphi - 正确安装OmniThreadLibrary

mysql - delphi 10.1 fdconnection libmysql.dll

listview - Delphi中如何同步两个ListView?

c++ - MSBuild 在构建时将 nuget 包应用于项目

delphi - 为什么编译器坚持我的函数是内联的,而实际上它不是?