在Delphi中是否有库项目的条件定义?

xqkwcwgp  于 2022-09-21  发布在  其他
关注(0)|答案(2)|浏览(148)

我有一个实用程序单元,其中的代码在几个应用程序和DLL之间共享。我想根据当前的项目类型有选择地编译本单元的部分内容:应用程序、包或库。我在System单元中找不到任何库或包的条件定义,Google也没有找到任何相关的东西。那么,编译器是否设置了IsLibraryIsPackage等条件定义?顺便说一句,我知道IsLibrary变量。

gc0ot86w

gc0ot86w1#

没有这样的预定义条件,也不可能有这样的条件。这是因为在编译时,不可能知道单元最终是否会链接到可执行文件、库或包中。

事实上,相同的编译单元可以链接到上述任何或所有项目类型。事实上,当您将RTL链接到您的项目中时,您可以自己看到这一点。无论项目类型如何,您都可以将相同的System单元、相同的已编译.dcu文件链接到所有项目中。

monwx1rj

monwx1rj2#

由于现有的惯例,绝对没有必要使用这样的条件句。

编译应用程序或库(编译方面相同)或包的不同之处如下:

  • 应用程序/库将仅编译单元中的已用部件
  • Package将编译单元接口部分引用的单元的所有部件

单位示例

unit foo;

interface

procedure foo1;
procedure foo2;

implementation

procedure foo3; 
begin
  // used by foo2, compile depends on foo2 compilation
end;

procedure foo4;
begin
  // will never be compiled, because is never used
end;

procedure foo1;
begin
  // Package: will always be compiled
  // Application/Library: will be compiled if used 
end;

procedure foo2;
begin
  // Package: will always be compiled
  // Application/Library: will be compiled if used 

  foo3;

end;

end.

这也是为什么使用包可能会产生更大的exe文件的原因,因为它可能包含来自预编译的dcu文件的未使用的代码部分。

相关问题