[Delphi]编译条件

当软件在多个DELPHI版本下编译时,需要处理各版本的不同情况,使用编译条件技术实现。

万一博客,编译指令基础使用介绍:http://www.cnblogs.com/del/category/168694.html

Delphi的版本区分:

RTL的版本: Run-Time Library 运行时库, 包括 System, SysUtils, Math 三个单元. 提供函数与语言, 编译器,

  操作系统及进程有关。 在System单元有常量定义:

  const
    RTLVersion = 22.00;   //XE

编译器的版本:查看方法,在命令行中,切换到对应delphi安装目录中的bin目录,执行dcc32.exe, 如XE:

可以看到 Embarcadero Delphi for Win32 compiler version 22.0 。

System单元:{$EXTERNALSYM CompilerVersion}

 

inc文件:

.inc 文件就是include file的意思。在单元文件中可以用指令{$I ‘xxx.inc‘} 进行导入。.inc文件中可以写符合delphi语法的

代码。另外: 引入 C 语言的 obj 文件是用 {$L 路径} 指令完成的。

 

常用编译指令说明:

指令 可选值 范围 注释
{$MESSAGE HINT|WARN|ERROR|FATAL ‘msg‘}   Local  
{$LEGACYIFEND ON}     IFEND就统一成ENDIF了,编译器会有警告,打开就可以和早期的版本兼容
{$HPPEMIT ‘string‘}     添加的字符在C++编译时使用
{$M +} /{$M-}   Local 与{$TYPEINFO ON} 作用是一样,指定为类生成与RTTI(Runtime Type Information)相关信息
{$EXTERNALSYM [ ‘typeNameInHpp‘ [ ‘typeNameInHppUnion‘ ]]}     数据类型映射,产生C++头文件,一般跟$OBJTYPENAME一起。
{$B-} +   完整的布尔表达式计算(禁止快捷计算)
{$R-} +   范围检查(数组,字符串等)
{$T-}     Typed @ operator
{$X+}     Extended syntax
{$P+}     Open string params
{$J+}     Writeable structured consts
{$H+}     Use long strings by default
{$Q-}     Overflow checking

 

预定义条件标识符:http://docwiki.embarcadero.com/RADStudio/Seattle/en/Conditional_compilation_(Delphi)

编译器版本:http://docwiki.embarcadero.com/RADStudio/Seattle/en/Compiler_Versions

编译符:http://docwiki.embarcadero.com/RADStudio/Seattle/en/Delphi_Compiler_Directives_(List)_Index

时间: 2024-10-29 10:45:46

[Delphi]编译条件的相关文章

把EXE可执行文件等作为资源包含在Delphi编译文件中

摘自我自己过去写的一段心得. 1.编辑资源文件 *.RCWave: 资源文件是声音文件:RCDATA: 二进制数据AVI: AVI动画:ICON: 图标文件:BITMAP: 位图文件:CURSOR: 光标文件:比如:MyWav WAVE "FileName.Wav" 2.使用Brcc32转化为*.RES文件 3.在工程中引用RES文件比如:{$R MyRes.RES} 4.运行时读入    通过TResourceStream ,比如TResourceStream.Create(HIns

Delphi编译/链接过程

下面展示了Delphi是怎样编译源文件,并且把它们链接起来,最终形成可执行文件. 当Delphi编译项目(Project)时,将编译项目源文件.窗体单元和其他相关单元,在这个过程中将会发生好几件事情: 首先,Object Pascal编译器把项目单元编译为二进制对象文件,然后资源编辑器将把诸如程序图标.窗体文件等资源编译成二进制资源文件,接着链接开始起作用:链接器根据编译器产生的二进制文件,依项目需要增加一些库文件,并把这些文件综合在一起产生最终的可执行文件. 编译.创建和链接 每当点击Run按

工程文件csproj使用编译条件指定属性

csproj工程文件中有很多xml格式的属性,比如PropertyGroup.ItemGroup,某些属性操作默认是全部的或者是当前编译条件的而已,当我们想指定某些属性只在某个编译条件下发生时就可以通过以下xml属性来指定: Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'" 或者 Condition=" '$(Configuration)' == 'Debug' " 例如,Release和Debug

Delphi编译错误信息一览表

';' not allowed before 'ELSE'       →       ElSE前不允许有“;” '<clause>' clause not allowed in OLE automation section       →       在OLE自动区段不允许“<clause>”子句 '<name>' is not a type identifier       →       <name>不是类型标识符 '<name>' not

Delphi 编译错误信息表

; not allowed before ELSE ElSE前不允许有“;” <clause> clause not allowed in OLE automation section 在OLE自动区段不允许“<clause>”子句 <name> is not a type identifier <name>不是类型标识符 <name> not previously declared as a PROPERTY <name>前面没有说

delphi编译时提示缺少delphi自己的单元文件

问题现象:在编译工程是,提示缺少DELPHI自己的很多单元. 问题原因:这可能是因为手动误删除,或是第三方控件安装时误删除DELPHI自己的目录引起的(如果说错了,希望高人指点). 问题处理: 方法一:找你同事,或是同学,看一下他的环境中都引入了什么目录,你增加一下就OK了. 方法二:复制我文章中的目录,增加一下(当然你得先换成相对目录).目录如下: D:\delphi\Borland\Delphi7\Lib;D:\delphi\Borland\Delphi7\Bin;D:\delphi\Bor

[Delphi编译错误]F2084 Internal Error: U2107

看到这个错误真是头痛,这是一个很旧的项目了,想修改下东西,清理下工程一编译出现这个该死的错误,百度了下,也没解决问题.没办法只好编译所有的BPL了.   这个项目是带包编译的,而且带了几个自己的包. 点击这行错误时每次都出现在udmShare上面,想想应该是这个文件有问题,然后这个文件又是ShareCentre.bpl中的文件,shareCentre.bpl是被工程带包编译的,找到shareCentre.bpl重新编译,还是不行,后来折腾几下,一查找发现ShareCentre.bpl, dcp都

Delphi 编译出来的程序被小红伞报病毒 TR/Spy.Banker.Gen4 [trojan]

今天碰到非常奇怪的问题,正常开发的单元代码,在A程序编译出来没有问题,将相同的单元引用到B程序编译出来就被小红伞报病毒TR/Spy.Banker.Gen4 [trojan],自动隔离删除. 今时今日的防病毒软件,实在是让人纠结不已,今天一个下午的排查代码,最后发现问题居然是出现在调用Windows API的地方,总体有两处代码会出现报病毒: 问题代码1: //单元1声明引用API函数 function GetCPInfoEx(CodePage: UINT; Flags:DWORD; var lp

makefile 和 编译条件 的简略总结

#-g gdb可看代码 #-fPIC -fPIC 的使用,会生成 PIC 代码,.so 要求为 PIC,以达到动态链接的目的,否则,无法实现动态链接. -fPIC 作用于编译阶段,告诉编译器产生与位置无关代码(Position-Independent Code),则产生的代码中,没有绝对地址,全部使用相对地址,故而代码可以被加载器加载到内存的任意位置,都可以正确的执行.这正是共享库所要求的,共享库被加载时,在内存的位置不是固定的. https://blog.csdn.net/derkampf/a