1

我有一些基于 Borland 的项目,低于版本。

在此处输入图像描述

我可以在 IDE 中清理/制作/构建它

在此处输入图像描述

直到今天我能够在 cmd 中实现它:

cd C:\repos\gradlecpp\Project\src\AssDelay
T:\Bin\bpr2mak.exe TSAssDelay.bpr
T:\Bin\make.exe -fTSAssDelay.mak

执行上述命令后,我有.dll文件。

今天我在系统范围内所做的只是卸载MSSql Server,现在我收到以下错误:

C:\repos\gradlecpp\Project\src\AssDelay>T:\Bin\make.exe -fTSAssDelay.mak
MAKE Version 5.2  Copyright (c) 1987, 2000 Borland
        T:\Bin\..\BIN\bcc32 -WD -Od -H=T:\Bin\..\lib\vcl50.csm -Hc -Vx -Ve -X- -r- -a8 -b- -k -y -v -vi-   -c -tWM -w-par -I..\DocGoodsCards;"C:\Program Files\B
orland\CBuilder5\Bin\";"D:\My project\tmp\";..\GroupClients;T:\Bin\..\Imports;P:\Tr\;L:\RSD\;"C:\Program Files\Borland\CBuilder5\Projects\";..\Common;"C:\Progra
m Files\Common Files\System\MAPI\1049\nt\";C:\;T:\Bin\..\include;T:\Bin\..\include\vcl;T:\Bin\..\include\atl;L:\CDBTypeLibrary\;L:\EhLib\;L:\FastReport\;L:\Grap
hics\;L:\ImgEdit\;L:\LGTypeLibrary\;L:\ML\;L:\Rx\;L:\TS\;L:\TSBF\;L:\TSTypeLibrary\;L:\VCLZip\;"L:\DL\" -D_DEBUG;_RTLDLL;NO_STRICT;_ATL_APARTMENT_THREADED;USING
_ATLVCL;_ATL_NO_SECURITY;INC_ATL_HEADERS;USEPACKAGES -n .\TSAssDelay.cpp .\TSAssDelay_ATL.cpp .\TSAssDelay_TLB.cpp .\FmDocAssDelayList.cpp .\DocAssDelayImpl.cpp
 .\FmDocAssDelayItem.cpp .\DmDocAssDelay.cpp .\FmDocAssLimitList.cpp .\DocAssLimitImpl.cpp .\FmDocAssLimitItem.cpp .\DmDocAssLimit.cpp .\FmDocAssDelayFU.cpp .\F
mOrdChngFU.cpp .\DmDocAssIU.cpp .\FmDocAssIUList.cpp .\FmDocAssIUItem.cpp .\FmDocAssIULine.cpp .\DocAssIUImpl.cpp .\FmDocAssIUPercent.cpp .\DmDocAss.cpp .\DocAs
sImpl.cpp .\FmDocAss.cpp
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
Error E2194: Could not find file 'project\tmp";..\GroupClients;T:\Bin\..\Imports;P:\Tr\;L:\RSD\;C:\Program Files\Borland\CBuilder5\Projects";..\Common;C:\Progra
m.cpp'
Error E2194: Could not find file 'Files\Common.cpp'
Error E2194: Could not find file 'Files\System\MAPI\1049\nt";C:\;T:\Bin\..\include;T:\Bin\..\include\vcl;T:\Bin\..\include\atl;L:\CDBTypeLibrary\;L:\EhLib\;L:\F
astReport\;L:\Graphics\;L:\ImgEdit\;L:\LGTypeLibrary\;L:\ML\;L:\Rx\;L:\TS\;L:\TSBF\;L:\TSTypeLibrary\;L:\VCLZip\;L:\DL" -D_DEBUG;_RTLDLL;NO_STRICT;_ATL_APARTMEN
T_THREADED;USING_ATLVCL;_ATL_NO_SECURITY;INC_ATL_HEADERS;USEPACKAGES -n .\TSAssDelay.cpp .\TSAssDelay_ATL.cpp .\TSAssDelay_TLB.cpp .\FmDocAssDelayList.cpp .\Doc
AssDelayImpl.cpp .\FmDocAssDelayItem.cpp .\DmDocAssDelay.cpp .\FmDocAssLimitList.cpp .\DocAssLimitImpl.cpp .\FmDocAssLimitItem.cpp .\DmDocAssLimit.cpp .\FmDocAs
sDelayFU.cpp .\FmOrdChngFU.cpp .\DmDocAssIU.cpp .\FmDocAssIUList.cpp .\FmDocAssIUItem.cpp .\FmDocAssIULine.cpp .\DocAssIUImpl.cpp .\FmDocAssIUPercent.cpp .\DmDo
cAss.cpp .\DocAssImpl.cpp .\FmDocAss.cpp .cpp'

所以现在,我没有结果.dll

如果我使用Project -> Export Makefile...,从 IDE 创建和运行 make 文件,我也会遇到同样的错误Project -> Execute Makefile

这是 Makefile 的一部分,据说是导致错误的原因:

SYSDEFINES = _RTLDLL;NO_STRICT;_ATL_APARTMENT_THREADED;USING_ATLVCL;_ATL_NO_SECURITY;INC_ATL_HEADERS;USEPACKAGES
INCLUDEPATH = ..\DocGoodsCards;"C:\Program Files\Borland\CBuilder5\Bin\";"D:\My project\tmp\";..\GroupClients;$(BCB)\Imports;P:\Tr\;L:\RSD\;"C:\Program Files\Borland\CBuilder5\Projects\";..\Common;"C:\Program Files\Common Files\System\MAPI\1049\nt\";C:\;$(BCB)\include;$(BCB)\include\vcl;$(BCB)\include\atl;L:\CDBTypeLibrary\;L:\EhLib\;L:\FastReport\;L:\Graphics\;L:\ImgEdit\;L:\LGTypeLibrary\;L:\ML\;L:\Rx\;L:\TS\;L:\TSBF\;L:\TSTypeLibrary\;L:\VCLZip\;"L:\DL\"
LIBPATH = "C:\Program Files\Borland\CBuilder5\Projects\Lib\";L:\Bpl\;..\DocGoodsCards;"C:\Program Files\Borland\CBuilder5\Bin\";"D:\My project\tmp\";"L:\DevExpress\ExpressEditors Library\Lib\";L:\DevExpress\ExpressInplaceEditors\Lib\;L:\DevExpress\ExpressQuantumGrid\Lib\;..\GroupClients;L:\DevExpress\Lib\;$(BCB)\Imports;P:\Tr\;L:\RSD\;"C:\Program Files\Borland\CBuilder5\Projects\";..\Common;"C:\Program Files\Common Files\System\MAPI\1049\nt\";L:\EhLib\;$(BCB)\Lib;$(BCB)\Lib\Obj;L:\Lib\;L:\ML\;L:\TS\;L:\TSBF\;"L:\DL\"

还有什么,在我们有一些脚本作为自动构建系统的一部分之前,那个固定的 makefile:

@echo off
REM -- Prepare the Command Processor --
SETLOCAL ENABLEEXTENSIONS
SETLOCAL DISABLEDELAYEDEXPANSION

if "%~1"=="" findstr "^::" "%~f0"&GOTO:EOF

for /f "tokens=1,* delims=]" %%A in ('"type %1|find /n /v """') do (
    set "line=%%B"
    if defined line (
        call set "line=echo.%%line:\"=\."%%"
        rem call set "line=echo.%%line:%~1=%~2%%"
        for /f "delims=" %%X in ('"echo."%%line%%""') do %%~X
    ) ELSE echo.
)

echo HERE

真的不可能理解这里发生了什么......我认为在十六进制编辑器中理解编译代码比 MS 批处理文件更容易......我认为在那里完成的是替换引号。我试图删除引号,但它没有帮助......

有人可以帮我从 cmd 编译这个项目吗?

更新

好的,所以我从make.exe -fTSAssdelay.mak包含空格的所有目录路径中生成并删除了命令:

@echo off

T:\Bin\bcc32 -WD -Od -H=T:\Bin\..\lib\vcl50.csm -Hc -Vx -Ve -X- -r- -a8 -b- -k -y -v -vi-   -c -tWM -w-par ^
-IL:\TS\;L:\TSBF\ -I..\GroupClients -I..\DocGoodsCards -IT:\Bin\..\Imports -IP:\Tr\ -IL:\RSD\ -I..\Common -IC:\ ^
-IT:\Bin\..\include -IT:\Bin\..\include\vcl -IT:\Bin\..\include\atl -IL:\CDBTypeLibrary\ -IL:\EhLib\ -IL:\FastReport\ ^
-IL:\Graphics\ -IL:\ImgEdit\ -IL:\LGTypeLibrary\ -IL:\ML\ -IL:\Rx\ -IL:\TSTypeLibrary\ -IL:\VCLZip\ -IL:\DL\ ^
-D_DEBUG;_RTLDLL;NO_STRICT;_ATL_APARTMENT_THREADED;USING_ATLVCL;_ATL_NO_SECURITY;INC_ATL_HEADERS;USEPACKAGES -n ^
.\TSAssDelay.cpp .\TSAssDelay_ATL.cpp .\TSAssDelay_TLB.cpp .\FmDocAssDelayList.cpp .\DocAssDelayImpl.cpp ^
.\FmDocAssDelayItem.cpp .\DmDocAssDelay.cpp .\FmDocAssLimitList.cpp .\DocAssLimitImpl.cpp .\FmDocAssLimitItem.cpp ^
.\DmDocAssLimit.cpp .\FmDocAssDelayFU.cpp .\FmOrdChngFU.cpp .\DmDocAssIU.cpp .\FmDocAssIUList.cpp .\FmDocAssIUItem.cpp ^
.\FmDocAssIULine.cpp .\DocAssIUImpl.cpp .\FmDocAssIUPercent.cpp .\DmDocAss.cpp .\DocAssImpl.cpp .\FmDocAss.cpp

rem -I"C:\Program Files\Borland\CBuilder5\Projects\" -I"C:\Program Files\Common Files\System\MAPI\1049\nt\"
rem -I"C:\Program Files\Borland\CBuilder5\Bin\" -I"D:\My project\tmp\" ^

如您所见,也可以将它们放在一起:-IL:\TS\;L:\TSBF\

所以现在,我得到了.obj文件,但我仍然需要链接。

如果我从 makefile 中删除这些路径,我会得到:

C:\repos\gradlecpp\Project\src\AssDelay>make.exe -fTSAssDelay.mak
MAKE Version 5.2  Copyright (c) 1987, 2000 Borland
        C:\PROGRA~1\Borland\CBUILD~1\Bin\..\BIN\bcc32 -WD -Od -H=C:\PROGRA~1\Borland\CBUILD~1\Bin\..\lib\vcl50.csm -Hc -Vx -Ve -X- -r- -a8 -b- -k -y -v -vi-   -c -tWM -w-par -I..\DocGoodsCar
ds;..\GroupClients;C:\PROGRA~1\Borland\CBUILD~1\Bin\..\Imports;P:\Tr\;L:\RSD\;..\Common;C:\;C:\PROGRA~1\Borland\CBUILD~1\Bin\..\include;C:\PROGRA~1\Borland\CBUILD~1\Bin\..\include\vcl;C:\PRO
GRA~1\Borland\CBUILD~1\Bin\..\include\atl;L:\CDBTypeLibrary\;L:\EhLib\;L:\FastReport\;L:\Graphics\;L:\ImgEdit\;L:\LGTypeLibrary\;L:\ML\;L:\Rx\;L:\TS\;L:\TSBF\;L:\TSTypeLibrary\;L:\VCLZip\;"L
:\DL\" -D_DEBUG;_RTLDLL;NO_STRICT;_ATL_APARTMENT_THREADED;USING_ATLVCL;_ATL_NO_SECURITY;INC_ATL_HEADERS;USEPACKAGES -n..\Common\ ..\Common\FmSelDoctype.cpp
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
Error E2266: No file names given
4

1 回答 1

1

解决方案

删除路径

好的,所以一种解决方案是删除所有带有空格的路径表示。如果您的路径中有包含空格的包含头文件或 lib 目录,则需要执行以下操作之一:

  1. 重命名文件夹
  2. 制作硬链接(如果在 Windows 中可以)
  3. 将文件夹挂载到虚拟驱动器

使用 perl,它可以是这样的:

$_ = $makefile_content
s/"[^"]*";?//

修补模板

其他解决方案是使用 makefile 模板,您将BCC32在其中替换定义MAKE SECTION

!if !$d(BCC32)
BCC32 = bcc32ide
!endif

原块是:

!if !$d(BCC32)
BCC32 = bcc32
!endif

似乎bcc32ide.exe尊重路径,其中包括空格。

原模板default.bmk放在 Borland 的 bin 文件夹中,所以复制文件,替换BCC32定义,让新名称为patched.bmk. 比bpr2mak.exe使用修改后的模板调用。在结束通话时make.exe

> bpr2mak.exe project.bpr -tpatched.bmk
> make.exe -fproject.mak
于 2021-11-09T15:35:48.160 回答