#batch-file #makefile #c builder-5
Вопрос:
У меня есть какой-то проект, построенный на Борланде, ниже версии.
Я могу очистить/сделать/построить его внутри IDE
До сегодняшнего дня мне удавалось делать это в cmd:
cd C:reposgradlecppProjectsrcAssDelay T:Binbpr2mak.exe TSAssDelay.bpr T:Binmake.exe -fTSAssDelay.mak
После выполнения команд выше у меня был .dll
файл.
Сегодня все, что я сделал по всей системе, — это деинсталляция MSSql Server
, и теперь я получаю следующую ошибку:
C:reposgradlecppProjectsrcAssDelaygt;T:Binmake.exe -fTSAssDelay.mak MAKE Version 5.2 Copyright (c) 1987, 2000 Borland T:Bin..BINbcc32 -WD -Od -H=T:Bin..libvcl50.csm -Hc -Vx -Ve -X- -r- -a8 -b- -k -y -v -vi- -c -tWM -w-par -I..DocGoodsCards;"C:Program FilesB orlandCBuilder5Bin";"D:My projecttmp";..GroupClients;T:Bin..Imports;P:Tr;L:RSD;"C:Program FilesBorlandCBuilder5Projects";..Common;"C:Progra m FilesCommon FilesSystemMAPI1049nt";C:;T:Bin..include;T:Bin..includevcl;T:Bin..includeatl;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 'projecttmp";..GroupClients;T:Bin..Imports;P:Tr;L:RSD;C:Program FilesBorlandCBuilder5Projects";..Common;C:Progra m.cpp' Error E2194: Could not find file 'FilesCommon.cpp' Error E2194: Could not find file 'FilesSystemMAPI1049nt";C:;T:Bin..include;T:Bin..includevcl;T:Bin..includeatl;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
.
Same error I have if I create and run make file from IDE using Project -gt; Export Makefile...
, Project -gt; Execute Makefile
.
Here is the part of Makefile, which supposedly reasons the error:
SYSDEFINES = _RTLDLL;NO_STRICT;_ATL_APARTMENT_THREADED;USING_ATLVCL;_ATL_NO_SECURITY;INC_ATL_HEADERS;USEPACKAGES INCLUDEPATH = ..DocGoodsCards;"C:Program FilesBorlandCBuilder5Bin";"D:My projecttmp";..GroupClients;$(BCB)Imports;P:Tr;L:RSD;"C:Program FilesBorlandCBuilder5Projects";..Common;"C:Program FilesCommon FilesSystemMAPI1049nt";C:;$(BCB)include;$(BCB)includevcl;$(BCB)includeatl;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 FilesBorlandCBuilder5ProjectsLib";L:Bpl;..DocGoodsCards;"C:Program FilesBorlandCBuilder5Bin";"D:My projecttmp";"L:DevExpressExpressEditors LibraryLib";L:DevExpressExpressInplaceEditorsLib;L:DevExpressExpressQuantumGridLib;..GroupClients;L:DevExpressLib;$(BCB)Imports;P:Tr;L:RSD;"C:Program FilesBorlandCBuilder5Projects";..Common;"C:Program FilesCommon FilesSystemMAPI1049nt";L:EhLib;$(BCB)Lib;$(BCB)LibObj;L:Lib;L:ML;L:TS;L:TSBF;"L:DL"
What else, before we had some script as part of automated build system, that fixed makefile:
@echo off REM -- Prepare the Command Processor -- SETLOCAL ENABLEEXTENSIONS SETLOCAL DISABLEDELAYEDEXPANSION if "%~1"=="" findstr "^::" "%~f0"amp;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
It is really impossible to understand what is going here… I think it is easier to understand compiled code in hex editor, than MS batch files… What I think is done there, is replacing of quotes. I tried to remove the quotes, but it didn’t helps…
Может ли кто-нибудь помочь мне скомпилировать этот проект из cmd?
Обновить
Хорошо, поэтому я получаю команду, созданную из make.exe -fTSAssdelay.mak
и удаляю все пути к каталогам, которые содержали пробелы:
@echo off T:Binbcc32 -WD -Od -H=T:Bin..libvcl50.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..includevcl -IT:Bin..includeatl -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 FilesBorlandCBuilder5Projects" -I"C:Program FilesCommon FilesSystemMAPI1049nt" rem -I"C:Program FilesBorlandCBuilder5Bin" -I"D:My projecttmp" ^
Как вы можете видеть, их также можно держать вместе: -IL:TS;L:TSBF
Итак, теперь я получаю .obj
файлы, но мне все еще нужно связать их.
Если я удалю эти пути из файла makefile, я получу:
C:reposgradlecppProjectsrcAssDelaygt;make.exe -fTSAssDelay.mak MAKE Version 5.2 Copyright (c) 1987, 2000 Borland C:PROGRA~1BorlandCBUILD~1Bin..BINbcc32 -WD -Od -H=C:PROGRA~1BorlandCBUILD~1Bin..libvcl50.csm -Hc -Vx -Ve -X- -r- -a8 -b- -k -y -v -vi- -c -tWM -w-par -I..DocGoodsCar ds;..GroupClients;C:PROGRA~1BorlandCBUILD~1Bin..Imports;P:Tr;L:RSD;..Common;C:;C:PROGRA~1BorlandCBUILD~1Bin..include;C:PROGRA~1BorlandCBUILD~1Bin..includevcl;C:PRO GRA~1BorlandCBUILD~1Bin..includeatl;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 ..CommonFmSelDoctype.cpp Borland C 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland Error E2266: No file names given
Комментарии:
1.
Could not find file 'projecttmp";..GroupClients;T:Bin..Imports;P:Tr;L:RSD;C:Program FilesBorlandCBuilder5Projects";..Common;C:Progra m.cpp'
На самом деле он ищет файл с таким искаженным именем файла, что, конечно, не удается. Почему сейчас вдруг просят поискать этот файл, я не знаю. Я думаю, вы сделали больше, чем просто удалили SQL server?2. И? Понятно, что здесь проблема с цитатами, мне просто нужно понять, в чем проблема.
3. Может быть, это «проблема с новой строкой», когда Windows требовала CRLF, и ваш редактор внезапно изменил все это на просто LF в файле makefile?
4. Этот вопрос, скорее всего, не подходит для формата вопросов и ответов из-за того, что существуют внешние факторы, которые читатели не могут распознать. Имея это в виду, проблема, по-видимому , связана с обработкой параметров и, возможно, поддержкой Borland пробелов в путях, т. Е.
projecttmp[...].cpp
То, что он не может найти, отделяется-I[...]D:My projecttmp
, а затем.cpp
добавляется, потому что он думает, что это файл. (То же самое сFilesCommon.cpp
fromC:Program FilesCommon Files
и т. Д.)5. @OlgaPshenichnikova
I think it is easier to understand compiled code in hex editor, than MS batch files
Я полностью согласна! Этот синтаксис причиняет боль моему мозгу. Хорошо, что вы нашли решение! 🙂
Ответ №1:
Решения
Удаление путей
Итак, одно из решений состоит в том, чтобы удалить все представления путей с пробелом. Если у вас есть какой-либо каталог заголовка include или библиотеки с пробелом в пути, вам нужно выполнить одно из следующих действий:
- Переименуйте папку
- Сделайте жесткую ссылку (если это возможно в Windows)
- Смонтировать папку на виртуальный диск
Используя perl, это может быть что-то вроде:
$_ = $makefile_content s/"[^"]*";?//
Исправьте шаблон
Другим решением является использование шаблона makefile, в котором вы замените BCC32
определение с MAKE SECTION
:
!if !$d(BCC32) BCC32 = bcc32ide !endif
Исходный блок является:
!if !$d(BCC32) BCC32 = bcc32 !endif
Похоже, что bcc32ide.exe
уважает пути, которые включают в себя пробелы.
Исходный шаблон default.bmk
помещен в папку bin Borland, поэтому скопируйте файл, замените BCC32
определение, пусть будет новое имя patched.bmk
. Чем звонить bpr2mak.exe
с измененным шаблоном. На финишном звонке make.exe
:
gt; bpr2mak.exe project.bpr -tpatched.bmk gt; make.exe -fproject.mak