我在Lazarus上有一个项目,希望使用gcc编译源代码,为此,我有一个名为TOpenDialogOpenDialog1和一个名为TProcessAProcess

我用以下代码调用gcc:

procedure TFormMain.btCompileClick(Sender: TObject);
begin
  if OpenDialog1.Execute then
  begin
    AProcess := TProcess.Create(nil);
    try
      AProcess.CommandLine := 'gcc.exe ' + OpenDialog1.FileName;
      AProcess.Options := AProcess.Options + [poWaitOnExit, poUsePipes];
      AProcess.Execute;
      OutputMemo.Lines.BeginUpdate;
      OutputMemo.Lines.Clear;
      OutputMemo.Lines.LoadFromStream(AProcess.Output);
      OutputMemo.Lines.EndUpdate;
    finally
      AProcess.Free;
    end;
  end;
end;


它可以编译(在Lazzarus上的项目),但是当我测试它时,通过尝试编译位于C:\Documents and Settings\Nathan Campos\Desktop的源test.c,我在OutputMemo上得到了它:


  'C:\ Documents':没有这样的文件或目录


然后,OpenDialog1无法获得带有空格的完整路径,或者gcc无法在带有空格的文件夹中找到它。

有什么建议可以帮助我吗?

最佳答案

它必须用引号引起来,以免空格使它绊倒。像这样:

AProcess.CommandLine := 'gcc.exe "' + OpenDialog1.FileName + '"';


那应该工作。

10-05 22:15