Module 在Pascal中的另一个文件夹上使用unit

Module 在Pascal中的另一个文件夹上使用unit,module,pascal,freepascal,Module,Pascal,Freepascal,我想要一个类似于/project/functions/project/src的结构。我将有一个类似于以下内容的单元/project/functions/helloUnit.pas: unit helloUnit; interface implementation uses classes; procedure helloWorld(output); begin writeln('Hello, World'); end. 和一个文件/project/src/main.pas,如: uses

我想要一个类似于
/project/functions
/project/src
的结构。我将有一个类似于以下内容的单元
/project/functions/helloUnit.pas

unit helloUnit;
interface
implementation
uses classes;
procedure helloWorld(output);
begin
  writeln('Hello, World');
end.
和一个文件
/project/src/main.pas
,如:

uses helloUnit;
Begin
  helloWorld;
End.

我一直试图让它工作,但还没有找到方法。我在linux命令行上使用fpc编译器,以防我没有定义路径或其他东西。

您的示例代码中有一些错误,需要修复 在尝试从命令行编译之前

首先,您需要一个用于
fpc
的项目文件来编译生成您的程序。为此,, 我在projects文件夹中创建了这个文件,并将其命名为
hello.lpr

program Hello;

uses
  hellounit,
  main;

begin
  HelloWorld;
end.
然后更正Main.Pas,如下所示:

unit main;

interface

uses helloUnit;

procedure SayHello;

implementation

procedure SayHello;
Begin
  helloWorld;
End;
End.
请注意,
过程SayHello已添加到接口部分,并且
结束
已添加到程序声明的末尾。
结束。
告诉 编译器确认它已到达单元中源代码的末尾

下一步按如下所示更正它

unit helloUnit;

interface

procedure helloWorld;

implementation

uses classes;

procedure helloWorld;
begin
  writeln('Hello, World');
end; {added}

end.
现在在projects文件夹中编写一个批处理文件
CompileHello.Bat
(假设是Windows) 包含

D:\Lazarus2\fpc\3.0.4\bin\i386-win32\fpc -Fufunctions;src hello.lpr
然后从projects文件夹中的CMD提示符运行它。
-Fu
编译器开关告诉fpc 在何处查找与项目不在同一文件夹中的单元 文件
-Fu
之后的路径可以相对于项目文件夹。如果你 按照以上步骤,它应该会成功

如果您使用的是Lazarus,fpc的配套IDE,那么至少有两种方法可以满足您的要求

  • 在IDE中打开HelloUnit后,使用IDE菜单中的View | Add Editor File to Project将HelloUnit添加到项目中。这可能是最好的方法,因为它明确地为项目标识了它

  • 使用Project |选项将HelloUnit.Pas所在的文件夹添加到项目的源路径中,并在弹出窗口中的“编译器选项”下,将该文件夹添加到RHS上的“其他单位文件”框中


  • 我不知道你指的是什么IDE。我想知道如何从命令行使用fpc。哦,对不起,我以为你会有Lazarus,一个免费的、非常好的fpc IDE。不使用它可以避免给自己造成困难。不管怎样,这是你的选择。遵循以下链接:查看如何将HelloUnit文件夹添加到项目搜索路径。实际上,这是针对使用pascal语法的程序脚本,我无法从程序中更改编译器路径,因此我想我必须展平目录结构才能访问设置文件。我希望能够在同一脚本中指示导入模块的路径,例如“从../functions使用此功能”。我将尝试IDE进行调试。对不起,可能我关闭的链接不好,请检查