为了构建项目,IDE现在使用MSBuild而不是以前的内部生成系统。IDE中的build、compile和make命令调用Microsoft的新生成引擎:MSBuild,它提供了全面的依赖性检查。MSBuild项目文件基于XML,包含描述项目的特定项、属性、任务和目标的部分。

有关MSBuild的详细信息,请参阅Microsoft文档。

一、将项目迁移到MSBuild

如果打开早期存在的项目(例如扩展名为.bdsproj的项目),IDE会自动将该项目转换为使用MSBuild,并将项目扩展名更改为.dproj(对于Delphi项目)或.cbproj(对于C++项目)。

项目组也被转换为MSBuild,并被赋予项目组扩展名.groupproj。

二、构建项目

可以在不了解MSBuild的情况下构建项目,因为IDE为您处理所有细节。Project>Compile和Project>Build命令都调用MSBuild,但每个命令的作用域不同。

还可以通过使用.dproj文件运行MSBuild.exe,从命令行显式生成项目。

要在自定义命令环境中调用MSBuild,请选择“开始”|“程序”|“Embarcadero RAD Studio Alexandria”|“RAD Studio Command Prompt”。此命令窗口自动设置了可执行文件的路径和安装目录的变量。

注:
实际运行的是安装目录下的文件:rsvars.bat
默认安装目录:C:\Program Files (x86)\Embarcadero\Studio\22.0\bin

如果要在命令行中使用MSBuild而不使用RAD Studio命令提示符,则应自行设置以下环境变量:

# 以下环境变量是在win11下的Delphi 11.2的,不同的版本目录稍有不同
BDS=C:\Program Files (x86)\Embarcadero\Studio\22.0
FrameworkDir=C:\Windows\Microsoft.NET\Framework\v4.0.30319
FrameworkVersion=v4.5

三、自定义生成构建配置

Project>Options 对话框的多个页面允许将选项组保存到命名的构建配置中。两个默认的生成配置是“Debug”和“Release”。您可以使用Configuration Manager选择性地应用任何命名的生成配置作为项目或项目组的活动配置。

注:
活动配置表示当前构建的配置,例如如果是Debug,则生成的是Debug版本!

四、设置构建事件并查看构建输出

构建项目时,生成结果将显示在“Output”选项卡上的“Message”窗口中。您可以使用Project > Options > Build Events对话框指定预生成和后生成事件(C++Builder也支持预链接事件)。如果指定生成事件,则指定的命令及其结果也会显示在“Message”窗口中。

五、文件类型确定生成顺序

MSBuild按照以下顺序构建项目:

序号

文件类型

1

.RC files

2

.ASM files

3

.PAS files

4

.CPP files

构建将通过项目管理器中的目录或文件夹节点向下进行。在每个文件夹中,根据文件类型按顺序构建文件。可以通过在“Projects”窗口中的不同文件夹或虚拟文件夹中放置文件来控制生成顺序。

六、MSBuild命令行构建

可以使用MSBuild命令行语法直接构建项目,具体语法如下:

MSBuild <projectname> [/t:<target name>][/p:config=<configuration_name>][target:Deploy][/p:platform=<platform_node_name>]
    • 使用命令行构建项目
  1. 从“开始”菜单中,选择Embarcadero RAD Studio | RAD Studio Command Prompt。命令提示符窗口自动设置使用RAD Studio工具(如MSBuild.exe)的环境。

注意:
在较新版本的Windows操作系统中,快捷方式将出现在应用程序列表菜单中。

  1. 打开包含项目的目录,例如C:\Users\<user>\Documents\Embarcadero\Studio\Projects\MyProject。

  1. 在命令行输入msbuild,不要回车。

  1. 输入项目名称,例如TelePoll.dproj(Delphi项目)或UserInfo.cbproj(C++项目)。如果项目不在当前目录中,则必须包含项目目录的完整路径名。

  1. 要指定目标,请输入 /t: 标记,后跟项目文件中指定的目标之一。三个标准目标名称是clean、make和build。

序号

标记

说明

1

clean

clean意味着清理项目,删除生成的文件,例如对象代码。clean 对应于“项目管理器”上下文菜单项“Clean”。

2

make

编译项目的方法。make对应于上下文菜单项Compile。

3

build

build意味着构建项目。build 对应于上下文菜单项“Build”。这三个目标类似于项目管理器上下文菜单上的“Clean”、“Compile”和“Build”命令。默认目标是build。

  1. 若要指定配置,请在 /p:Configuration= 之后输入配置名称。如果未指定配置,MSBuild将使用当前活动配置。若要指定一个配置,请使用项目中某个现有生成配置的名称。这可以是默认配置(如Debug),也可以是添加到项目中的配置。如果配置名称中有空格,请输入由双引号限定的名称,例如:/p:Configuration=“My config”。

  1. 要准备部署应用程序,请添加 /target:Deploy 选项。

  1. 如有任何其他选项,请输入,然后按Return(回车)开始构建。

提示:
要显示MSBuild的联机帮助(包括完整的示例命令行),请在命令行提示符输入MSBuild /help。
更多关于MSBuild的帮助,参见微软文档:http://msdn.microsoft.com/default.aspx

    • 命令行构建android和ios项目

创建apk或ipa包文件需要*.deployproj文件。此文件仅从IDE生成。每次在部署管理器中进行更改以更新*.deployproj文件时,都需要从IDE部署应用程序。单击Deploy 图标以再次创建文件。

  1. IDE中的步骤:

  1. 在项目窗口中选择项目的选项:构建Configurations和PlatForms平台。

  1. Compile 编译项目。

  1. 选择 Project > Deployment 并且按下 Deploy 图标(注意:这将生成一个与MSBuild一起使用的*.deployproj文件)。

  1. 保存项目。

  1. MSBuild步骤:

根据MSBuild命令行构建命令指定目标平台:

msbuild <project_name> ... /p:platform=Android / iOSDevice64
    • 举例

以下MSBuild命令示例:

要创建.apk安装程序以项目部署到Android目标平台,请使用与以下语法类似的命令:

msbuild MyApps_CBuilder.cbproj /t:Build /p:Configuration=Debug /target:Deploy /p:platform=Android

要将Delphi项目部署到iOS64目标平台,请使用与以下语法类似的命令:

msbuild MyProj_Delphi.dproj /t:Build /p:Configuration=Debug /target:Deploy /p:platform=iOSDevice64
    • 附录:MSBuild 详细命令帮助
PS C:\Users\wuxihong> msbuild /help
Microsoft(R) 生成引擎版本 4.8.9032.0
[Microsoft .NET Framework 版本 4.0.30319.42000]
版权所有 (C) Microsoft Corporation。保留所有权利。语法:              MSBuild.exe [选项] [项目文件]描述:          在项目文件中生成指定的目标。如果未指定项目文件,MSBuild 将搜索当前工作目录来查找文件扩展名以“proj”结尾的文件并使用该文件。开关:/target:<targets>  在此项目中生成这些目标。使用分号或逗号分隔多个目标,或者分别指定每个目标。(缩写: /t)示例:/target:Resources;Compile/property:<n>=<v>  设置或重写这些项目级属性。<n> 是属性名,<v> 为属性值。请使用分号或逗号分隔多个属性,或者分别指定每个属性。(缩写: /p)示例:/property:WarningLevel=2;OutDir=bin\Debug\/maxcpucount[:n]   指定用于生成的最大并发进程数。如果未使用开关,则使用的默认值为 1。如果使用开关时不带值,MSBuild 将最多使用计算机上的处理器数。(缩写: /m[:n])/toolsversion:<version>要在生成过程中使用的 MSBuild 工具集(任务、目标等) 的版本。此版本将重写个别项目指定的版本。(缩写:/tv)示例:/toolsversion:3.5/verbosity:<level> 在事件日志中显示此级别的信息量。可用的详细级别有: q[uiet]、 m[inimal]、n[ormal]、d[etailed] 和 diag[nostic]。(缩写: /v)示例:/verbosity:quiet/consoleloggerparameters:<parameters>控制台记录器的参数。(缩写: /clp)可用的参数有:PerformanceSummary -- 显示在任务、目标和项目上花费的时间。Summary -- 结束时显示错误和警告的摘要。NoSummary -- 结束时不显示错误和警告的摘要。ErrorsOnly -- 仅显示错误。WarningsOnly -- 仅显示警告。NoItemAndPropertyList -- 在开始生成每个项目时不显示项和属性的列表。ShowCommandLine -- 显示 TaskCommandLineEvent 消息ShowTimestamp -- 将时间戳作为所有消息的前缀显示。ShowEventId -- 显示已开始事件、已完成事件和消息的事件 ID。ForceNoAlign -- 不将文本与控制台缓冲区的大小匹配。DisableConsoleColor -- 将默认控制台颜色用于所有记录消息。DisableMPLogging -- 在非多处理器模式下运行时,禁用输出的多处理器日志记录样式。EnableMPLogging -- 即使在非多处理器模式下运行,也启用多处理器日志记录样式。默认情况下启用此日志记录样式。Verbosity -- 重写此记录器的  /verbosity设置。示例:/consoleloggerparameters:PerformanceSummary;NoSummary;Verbosity=minimal/noconsolelogger   禁用默认控制台记录器,并且不将事件记录到控制台。(缩写: /noconlog)/fileLogger[n]     将生成输出记录到文件中。默认情况下,该文件在当前目录中,名称为“msbuild[n].log”。所有节点中的事件合并到单个日志中。fileLogger 的文件和其他参数的位置可以通过添加“/fileLoggerParameters[n]”开关来指定。“n”(如果存在)可以为 1-9 的数字,允许最多附加10 个文件记录器。(缩写: /fl[n])/fileloggerparameters[n]:<parameters>为文件记录器提供任何额外的参数。存在此开关意味着存在对应的 /filelogger[n] 开关。“n”(如果存在)可以为 1-9 的数字。任何分布式文件记录器也可以使用/fileloggerparameters,具体可参阅 /distributedFileLogger 的说明。(缩写: /flp[n])为控制台记录器列出的相同参数可用。某些其他可用参数有:LogFile -- 生成日志将写入其中的日志文件的路径。Append -- 确定是将生成日志附加到日志文件,还是覆盖日志文件。如果设置此开关,则会将生成日志附加到日志文件;如果不设置此开关,则会覆盖现有日志文件的内容。默认值为不附加到日志文件。Encoding -- 指定文件的编码,例如,UTF-8、Unicode 或 ASCII默认的详细级别为 Detailed。示例:/fileLoggerParameters:LogFile=MyLog.log;Append;Verbosity=diagnostic;Encoding=UTF-8/flp:Summary;Verbosity=minimal;LogFile=msbuild.sum/flp1:warningsonly;logfile=msbuild.wrn/flp2:errorsonly;logfile=msbuild.err/distributedlogger:<central logger>*<forwarding logger>使用此记录器来记录 MSBuild 中的事件,向每个节点附加不同的记录器实例。若要指定多个记录器,请分别指定每个记录器。(缩写 /dl)<logger> 语法为:[<logger class>,]<logger assembly>[;<logger parameters>]<logger class> 语法为:[<partial or full namespace>.]<logger class name><logger assembly> 语法为:{<assembly name>[,<strong name>] | <assembly file>}<logger parameters> 是可选的,并且按键入的形式原样传递给记录器。(缩写: /l)示例:/dl:XMLLogger,MyLogger,Version=1.0.2,Culture=neutral/dl:MyLogger,C:\My.dll*ForwardingLogger,C:\Logger.dll/distributedFileLogger将生成输出记录到多个日志文件,每个 MSBuild 节点一个日志文件。这些文件的初始位置为当前目录。默认情况下,这些文件名为“MSBuild<nodeid>.log”。可通过添加“/fileLoggerParameters”开关来指定这些文件的位置和 fileLogger 的其他参数。如果日志文件名是通过 fileLoggerParameters开关设置的,分布式记录器将使用 fileName 作为模板并将节点 ID 附加到此 fileName以便为每个节点创建一个日志文件。/logger:<logger>   使用此记录器来记录 MSBuild 中的事件。若要指定多个记录器,请分别指定每个记录器。<logger> 语法为:[<logger class>,]<logger assembly>[;<logger parameters>]<logger class> 语法为:[<partial or full namespace>.]<logger class name><logger assembly> 语法为:{<assembly name>[,<strong name>] | <assembly file>}<logger parameters> 是可选的,并按键入的形式原样传递给记录器。(缩写: /l)示例:/logger:XMLLogger,MyLogger,Version=1.0.2,Culture=neutral/logger:XMLLogger,C:\Loggers\MyLogger.dll;OutputAsHTML/validate          依据默认架构验证项目。(缩写:/val)/validate:<schema> 依据指定的架构验证项目。 (缩写:/val)示例:/validate:MyExtendedBuildSchema.xsd/ignoreprojectextensions:<扩展名>确定要生成的项目文件时要忽略的扩展名的列表。使用分号或逗号来分隔多个扩展名。(缩写: /ignore)示例:/ignoreprojectextensions:.sln/nodeReuse:<parameters>允许或禁止重复使用 MSBuild 节点。参数包括:True -- 生成完成后节点将保留,并且将由后面的生成重复使用(默认)False -- 生成完成后节点将不会保留(缩写: /nr)示例:/nr:true/preprocess[:file]通过嵌入将在生成过程中导入的所有文件并标记其边界,创建一个聚合的项目文件。这对于了解导入什么文件、从何处导入以及这些文件在生成中的构成非常有用。默认情况下,输出将写入控制台窗口。如果提供输出文件的路径,则将改用该路径。(缩写: /pp)示例:/pp:out.txt/detailedsummary在生成的结尾显示有关所生成的配置以及如何向节点安排这些配置的详细信息。(缩写: /ds)@<file>            从文本文件插入命令行设置。若要指定多个响应文件,请分别指定每个响应文件。自动从以下位置使用任何名为“msbuild.rsp”的响应文件:(1) msbuild.exe 的目录(2) 生成的第一个项目或解决方案的目录/noautoresponse    不自动包括任何 MSBuild.rsp 文件。(缩写:/noautorsp)/nologo            不显示启动版权标志和版权消息。/version           仅显示版本信息。(缩写: /ver)/help              显示此用法消息。(缩写: /? 或 /h)示例:MSBuild MyApp.sln /t:Rebuild /p:Configuration=ReleaseMSBuild MyApp.csproj /t:Clean/p:Configuration=Debug;TargetFrameworkVersion=v3.5

全文完。

今天是大年初五,五福临门!

MSBuild 命令行编译Delphi相关推荐

  1. win10 uwp 使用 msbuild 命令行编译 UWP 程序

    原文:win10 uwp 使用 msbuild 命令行编译 UWP 程序 版权声明:博客已迁移到 http://lindexi.gitee.io 欢迎访问.如果当前博客图片看不到,请到 http:// ...

  2. VisualStudio 命令行编译 build 通过 rebuild 不通过

    在使用命令行编译项目,发现使用 build 可以编译通过,但是通过 rebuild 编译提示找不到项目,明明在对应的文件夹存在项目输出的 dll 文件,但是会提示找不到 在命令行编译的 build 和 ...

  3. 命令行编译运行CSharp文件

    命令行编译运行CSharp文件 找到csc.exe所在的路径.如我本机上为"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727" 在环境变量 ...

  4. Windows使用MSVC,命令行编译,链接64位dll,Python调用

    文章目录 代码 编译 链接 Python调用 前一篇博客: Windows下使用Visual Studio自带的MSVC,命令行编译C/C++程序 代码 mylib.h代码如下: #ifndef MY ...

  5. java打包dex_Android 命令行编译、打包生成apk文件

    一.搭建搭建环境 1. 安装JDK 和 Android SDK 2. 配置环境变量 D:\android-sdk-windows\tools C:\Program Files\Java\jdk1.6. ...

  6. python 基础命令-Python unittest第一篇:基础入门+命令行编译

    unittest单元测试框架最初受JUnit启发,与其他语言的主要单元测试框架具有相似的风格. 它支持测试自动化,支持开启或关闭某个测试,支持结合测试.另外它可以生成各个单元测试的报告.为了实现以上功 ...

  7. 命令行编译 WRK ,windbg 调试

    一.准备工作 本文记录如何用命令行编译WRK内核,下面列出需要准备的东西: win2k3 sp1 虚拟机环境 WRK v1.2源码 两个需要用到的dll:msvcr71.dll ,msvcp71.dl ...

  8. VC6命令行编译工程方法

    VC6命令行编译工程方法 昨天下载一个界面库wxWidgets,编译里面的库很痛苦,有好几个工程,我的在一边等待,痛苦!!于是上网找到命令行编译的方法,可以写一个批处理文件,呵呵,想起以前经理编译工程 ...

  9. Java 命令行编译项目

    如果是用Exlipse, 第三方的包可以放在eclipse文件夹的jre包的lib文件夹中! (初学者的一些总结-高手们勿喷哈-) 原因: 以前一直用Eclispe编程环境运行Java.非常舒服,就像 ...

最新文章

  1. UA MATH523A 实分析3 积分理论16 截口与单调类、特征函数的Fubini定理
  2. 操作系统:用户态和核心态的区别
  3. 【多线程高并发】查看Java代码对应的汇编指令教程
  4. 【面试必备】GET和POST两种基本请求方法的区别
  5. Composer php 类库商店
  6. [7]对话框控件的变量绑定
  7. python中list最大值_【Python实践-5】使用迭代查找一个list中最小和最大值
  8. ZABBIX 监控 JBOSS 7.1.1
  9. Atitit.  Exception in thread main java.lang.Error: Unresolved compilation problem:
  10. 关于如何用python下载文件
  11. 【ASP.NET】ASP.NET入门
  12. excel转置怎么操作_数据粘贴只会Ctrl+C就out了,五种选择性粘贴方法,让操作更高效...
  13. 如何让函数只执行一次
  14. 启动到APP的设置页,小米手机自启动管理页,小米手机APP权限管理页
  15. 广义相对论-学习记录1-第一章-历史回顾
  16. java串口rxtx下载_WINDOWS环境下JAVA串口RXTX编程DEMO
  17. 你最喜欢信用卡的哪个优点?
  18. 【工业4.0】深度报告:独家解密工业4.0真正图谋?
  19. 内卷?谈谈AI算法人才职业发展
  20. 最优化建模、算法与理论(二)—— 典型优化问题

热门文章

  1. 一文读懂区块链技术如何改变非洲贸易(下)
  2. Linux命令·touch
  3. NIO的网络IO操作
  4. 监理工程师职责对比关系
  5. mac bookpro 关闭显示器
  6. android 播放器封装,Android视频播放最全总结:MediaPlayer+TextureView封装一个完美实现全屏、小窗视频播放器,附项目源码...
  7. Golang语言判断平年和闰年
  8. npm安装包报错问题及解决
  9. 不忘初“芯”,共创未来!安创成长营四期Demo Day圆满落幕
  10. 基于Ultra96v2的卷积神经网络终端部署