我有一些项目,建立在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...,Project -> Execute Makefile从IDE创建并运行make,也会出现相同的错误。
下面是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发布于 2021-11-09 15:35:48
解决方案
移除路径
好的,一种解决方案是删除带空间的所有路径表示。如果您的路径中有包含头或lib目录中的空格,则需要执行以下操作之一:
使用perl,它可以如下所示:
$_ = $makefile_content
s/"[^"]*";?//修补模板
另一种解决方案是使用makefile模板,在该模板中,您将用以下方式替换MAKE SECTION中的MAKE SECTION定义:
!if !$d(BCC32)
BCC32 = bcc32ide
!endif原来的区块是:
!if !$d(BCC32)
BCC32 = bcc32
!endifbcc32ide.exe似乎尊重路径,其中包括空间。
最初的模板是default.bmk放在Borland的bin文件夹中,所以复制文件,替换BCC32定义,让新的名称将是patched.bmk。而不是用修改过的模板调用bpr2mak.exe。在finish调用make.exe
> bpr2mak.exe project.bpr -tpatched.bmk
> make.exe -fproject.makhttps://stackoverflow.com/questions/69897274
复制相似问题