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.
2条答案
按热度按时间gc0ot86w1#
没有这样的预定义条件,也不可能有这样的条件。这是因为在编译时,不可能知道单元最终是否会链接到可执行文件、库或包中。
事实上,相同的编译单元可以链接到上述任何或所有项目类型。事实上,当您将RTL链接到您的项目中时,您可以自己看到这一点。无论项目类型如何,您都可以将相同的
System
单元、相同的已编译.dcu文件链接到所有项目中。monwx1rj2#
由于现有的惯例,绝对没有必要使用这样的条件句。
编译应用程序或库(此编译方面相同)或包的不同之处如下:
单位示例
这也是为什么使用包可能会产生更大的
exe
文件的原因,因为它可能包含来自预编译的dcu
文件的未使用的代码部分。