我在Lazarus上有一个项目,希望使用gcc编译源代码,为此,我有一个名为TOpenDialog
的OpenDialog1
和一个名为TProcess
的AProcess
。
我用以下代码调用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 + '"';
那应该工作。