powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Создание obj файла с помощью cl.exe
28 сообщений из 28, показаны все 2 страниц
Создание obj файла с помощью cl.exe
    #35480154
Proger89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здраствуйте уважаемые форумчане. Возникла необходимость компиляции срр файла в объектник без применения средств студии (тоесть только компилятор и коммандная строка).
Написал следуюший батник:
cl /Fo Console.cpp /I "c:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\"
но при его выполнении компилятор выдает гору ошибок, по всей видимости связанных с последней:
"Cannot open include file: 'windows.h': Invalid argument"
С чем это связано?
Заранее благодарен
...
Рейтинг: 0 / 0
Создание obj файла с помощью cl.exe
    #35480156
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Proger89Здраствуйте уважаемые форумчане. Возникла необходимость компиляции срр файла в объектник без применения средств студии (тоесть только компилятор и коммандная строка).
Написал следуюший батник:
cl /Fo Console.cpp /I "c:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\"
но при его выполнении компилятор выдает гору ошибок, по всей видимости связанных с последней:
"Cannot open include file: 'windows.h': Invalid argument"
С чем это связано?
Заранее благодарен

С тем что не настроены пути. Поищи в каталоге студии bin/vcvar32.bat - он настраиваем переменные среды окружения, которые используются cl для компиляции.
...
Рейтинг: 0 / 0
Создание obj файла с помощью cl.exe
    #35480162
Proger89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Анатолий Широков
С тем что не настроены пути. Поищи в каталоге студии bin/vcvar32.bat - он настраиваем переменные среды окружения, которые используются cl для компиляции.
Но как это сделать? В этом файле только ссылка на другой файл (vsvars32.bat).
...
Рейтинг: 0 / 0
Создание obj файла с помощью cl.exe
    #35480166
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Proger89 Анатолий Широков
С тем что не настроены пути. Поищи в каталоге студии bin/vcvar32.bat - он настраиваем переменные среды окружения, которые используются cl для компиляции.
Но как это сделать? В этом файле только ссылка на другой файл (vsvars32.bat).

запуски cmd
запусти файл vsvars32.bat
теперь можешь компилировать с помощью cl
...
Рейтинг: 0 / 0
Создание obj файла с помощью cl.exe
    #35480195
Proger89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Анатолий Широков
теперь можешь компилировать с помощью cl
Наверное я действительно очень туплю. Но, когда я запустил cmd выполнил вышеуказанный батник и выполнил батник
cl /Fo Console.cpp /L c:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\
компилятор выдал кучу сообшений об ошибках ссылаясь на winbase.h.
Ошибок в коде моих модулей точно нет, проверено в студии.
В чем может быть проблема?
...
Рейтинг: 0 / 0
Создание obj файла с помощью cl.exe
    #35480198
clihlt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если уже запустили батник, то /L"c:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\" в параметрах cl лишняя
...
Рейтинг: 0 / 0
Создание obj файла с помощью cl.exe
    #35480390
Proger89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
... нажал на Enter не дописав до конца.
Я уже проверил и
cl /Fo Console.cpp
и
cl Console.cpp
после запуска батника для установки переменных окружения.
...
Рейтинг: 0 / 0
Создание obj файла с помощью cl.exe
    #35531582
Emery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To: Proger89

Proger89Возникла необходимость компиляции срр файла в объектник без применения средств студии (тоесть только компилятор и коммандная строка).
Написал следуюший батник:
cl /Fo Console.cpp /I "c:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\"
но при его выполнении компилятор выдает гору ошибок...

Проблему можно поставить более глобально. Компиляция проектов Visual Studio C++ из командной строки. Дело в том, что при изучении примеров на C++ часто приходится сталкиваться с ситуацией, когда программа компилируется в одной версии студии, но не компилируется в другой. Например, открытый проект 2С (15 Мб текста в исходниках) при компиляции в VC8 выдает туеву хучу ошибок, тогда как при компиляции в VC6 ограничивается парой предупреждений. То же касается компиляции dll проекта 1С++ и других огромных проектов. Можно конечно поставить несколько версий студий на компьютере, однако они слегонца конфликтуют. Например, в VC6 становиться недоступной справочная система после установки еще VC8 и т.п. Лучше ограничится одной инсталлированной студией (я предпочитаю 6-ю), а из остальных взять только библиотечные и другие необходимые файлы, а также exe-ки и dll-ки для компиляции из командной строки. А дальше пытаться компилировать нужные проекты либо используя nmake-подобные средства, либо с помощью командных файлов. Первые мне не показались достаточно удобными и эффективными, а по вторым информации в Интернете практически нет. Во всяком случае, я ничего путного так и не нашел. Поэтому пошел по пути научного втыка и написал свой командный файл, который позволяет создавать не только объектные, но и исполнимые файлы.

Вот мой файл ExeR.cmd (настроенный пока только на Release версию) :

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
::****************************************************************************
::*** Параметры компиляции ***
::****************************************************************************

:: Создайте соответствующий каталог вручную!
SET MODE=Release
::SET MODE=Debug

:: При отсутствии ресурсов закомментируйте соответствующую команду компиляции!
SET RCFILE=main.rc

:: Если нужен только *.lib файл, то LIBFLAG=/LIB
SET LIBFLAG=
::SET LIBFLAG=/LIB

SET BINFILE=%MODE%\lional.exe

SET UNICODE=
::SET UNICODE=Yes

:: При отсутствии файлов stdafx.* закомментируйте соответствующую команду компиляции!
:: Если используется файл stdafx.h, то U_STDAFX=/Yu"stdafx.h"
::SET U_STDAFX=
SET U_STDAFX=/Yu"stdafx.h"

:: Тип приложения:
SET SYSTEM=WINDOWS
::SET SYSTEM=CONSOLE

::****************************************************************************
::*** Основной командный файл ***

SET OUTFILE=a.cmd

::****************************************************************************
::*** Файл вывода сообщений из командного файла ***

SET MSGFILE=a.a

::****************************************************************************
:: Версия компилятора

SET VSVER= 6 . 0 
::SET VSVER= 7 . 0 
::SET VSVER= 7 . 1 
::SET VSVER= 8 . 0 

::****************************************************************************
::****************************************************************************
::*** Основные каталоги ***

if "%VSVER%" == "8.0" (
	SET VS=F:\Program Files\Microsoft Visual Studio  8 
	SET VCPP=F:\Program Files\Microsoft Visual Studio  8 \VC
	SET REPORT=/nologo /ErrorReport:none
) else (
  if "%VSVER%" == "7.1" (
	SET VS=F:\Program Files\Microsoft Visual Studio .NET  2003 
	SET VCPP=F:\Program Files\Microsoft Visual Studio .NET  2003 \VC7
  ) else (
    if "%VSVER%" == "7.0" (
		SET VS=F:\Program Files\Microsoft Visual Studio .NET
		SET VCPP=F:\Program Files\Microsoft Visual Studio .NET\VC7
    ) else (
	    if "%VSVER%" == "6.0" (
			SET VS=C:\Program Files\Microsoft Visual Studio
			SET VCPP=C:\Program Files\Microsoft Visual Studio\VC98
	    ) else (
			echo ::Not found VS ver. "%VSVER%" >>%OUTFILE%
			PAUSE
			EXIT
	    )
	  )
  )
  
  SET REPORT=/nologo
)

SET BIN=%VCPP%\Bin
SET CL=%BIN%\cl.exe
SET RC=%BIN%\rc.exe
SET LINK=%BIN%\link.exe

::SET COMMON=%VS%\Common
::SET IDE=%COMMON%\IDE
::SET TOOLS=%COMMON%\TOOLS
::SET WINNT=%TOOLS%\WINNT
::SET MSDEV98=%VS%\MSDev98

::****************************************************************************
::*** Каталоги основных *.h & *.lib файлов ***

if "%VSVER%" == "8.0" (
	SET INCLUDES=/I"%VCPP%\Include" /I"%VCPP%\atlmfc\Include" /I"%VCPP%\PlatformSDK\Include"
	SET LIBS=/LIBPATH:"%VCPP%\LIB" /LIBPATH:"%VCPP%\atlmfc\LIB" /LIBPATH:"%VCPP%\PlatformSDK\LIB"
) else (
	  if "%VSVER%" == "7.1" (
		SET INCLUDES=/I"%VCPP%\Include" /I"%VCPP%\atlmfc\Include" /I"%VCPP%\PlatformSDK\Include"
		SET LIBS=/LIBPATH:"%VCPP%\LIB" /LIBPATH:"%VCPP%\atlmfc\LIB" /LIBPATH:"%VCPP%\PlatformSDK\LIB"
	  ) else (
	    if "%VSVER%" == "7.0" (
			SET INCLUDES=/I"%VCPP%\Include" /I"%VCPP%\atlmfc\Include"
			SET LIBS=/LIBPATH:"%VCPP%\LIB" /LIBPATH:"%VCPP%\atlmfc\LIB"
	    ) else (
				:: Здесь "%VSVER%" == "6.0"
				SET INCLUDES=/I"%VCPP%\Include" /I"%VCPP%\MFC\Include" /I"%VCPP%\ATL\Include"
				SET LIBS=/LIBPATH:"%VCPP%\LIB" /LIBPATH:"%VCPP%\MFC\LIB"
			)
		)
  )
)

::****************************************************************************
::*** Служебные файлы ***

if NOT "%RCFILE%" == "" (
	SET RESFILE=%MODE%\%MODE%.res
)

SET PCHFILE=%MODE%\%MODE%.pch
SET PDBFILE=%MODE%\%MODE%.pdb

::****************************************************************************
::*** Переменная PATH ***

::SET PATH=%MSDEV98%\Bin;%VCPP%\Bin;%TOOLS%;%WINNT%;%PATH%

::****************************************************************************
::*** Определения ***

SET DEFINES=/D "WIN32"

if "%LIBFLAG%" == "" (
	SET DEFINES=%DEFINES% /D "_WINDOWS"  /D "_MBCS" /D "_AFXDLL"
)

if "%MODE%" == "Release" (
	SET DEFINES=%DEFINES% /D "NDEBUG"
)

if NOT "%UNICODE%" == "" (
	SET DEFINES=%DEFINES% /D "UNICODE" /D "_UNICODE"
)

:: Дополнительные определения:
::SET DEFINES=%DEFINES%

::****************************************************************************
::*** Флаги компилятора cl.exe ***

SET CLFLAGS=/O2 /MD /GX /W3 /FD /c /nologo /Fo"%MODE%/" /Fd"%MODE%/"

if NOT "%U_STDAFX%" == "" (
	SET CLFLAGS=%CLFLAGS% /Fp"%PCHFILE%"
)

::****************************************************************************
::*** Флаги компилятора ресурсов rc.exe ***

SET RCFLAGS=/L 0x409 /Fo"%RESFILE%"

::****************************************************************************
::*** Флаги линковщика link.exe ***

SET LINKFLAGS=/MACHINE:I386 /NOLOGO /OUT:"%BINFILE%"

if "%LIBFLAG%" == "" (
	SET LINKFLAGS=%LINKFLAGS% /INCREMENTAL:NO /SUBSYSTEM:%SYSTEM%^
 /NODEFAULTLIB:"LIBC" /PDB:"%PDBFILE%"
)

::****************************************************************************
::*** Содержимое основного командного файла ***

echo ::*** Параметры компиляции: >%OUTFILE%

echo ::MODE = "%MODE%" >>%OUTFILE%
echo ::RCFILE = "%RCFILE%" >>%OUTFILE%
echo ::LIBFLAG = "%LIBFLAG%" >>%OUTFILE%
echo ::BINFILE = "%BINFILE%" >>%OUTFILE%
echo ::UNICODE = "%UNICODE%" >>%OUTFILE%
echo ::U_STDAFX = %U_STDAFX% >>%OUTFILE%
echo ::SYSTEM = %SYSTEM% >>%OUTFILE%
echo :: >>%OUTFILE%

echo ::*** Переменные окружения: >>%OUTFILE%

echo ::PATH = "%PATH%" >>%OUTFILE%
echo ::INCLUDE = "%INCLUDE%" >>%OUTFILE%
echo ::LIB = "%LIB%" >>%OUTFILE%
echo :: >>%OUTFILE%

echo ::*** Наши переменные: >>%OUTFILE%

echo ::VS = "%VS%" >>%OUTFILE%
echo ::VCPP = "%VCPP%" >>%OUTFILE%
echo ::BIN = "%BIN%" >>%OUTFILE%
echo ::CL = "%CL%" >>%OUTFILE%
echo ::RC = "%RC%" >>%OUTFILE%
echo ::LINK = "%LINK%" >>%OUTFILE%
echo ::INCLUDES = %INCLUDES% >>%OUTFILE%
echo ::LIBS = %LIBS% >>%OUTFILE%
echo ::DEFINES = %DEFINES% >>%OUTFILE%
echo ::CLFLAGS = %CLFLAGS% >>%OUTFILE%
echo ::RCFLAGS = %RCFLAGS% >>%OUTFILE%
echo ::LINKFLAGS = %LINKFLAGS% >>%OUTFILE%
echo :: >>%OUTFILE%

echo ::*** Служебные файлы: >>%OUTFILE%

echo ::RESFILE = "%RESFILE%" >>%OUTFILE%
echo ::PCHFILE = "%PCHFILE%" >>%OUTFILE%
echo ::PDBFILE = "%PDBFILE%" >>%OUTFILE%
echo :: >>%OUTFILE%

echo ::*** Команды: >>%OUTFILE%

echo echo. ^> %MSGFILE% >>%OUTFILE%

if NOT "%U_STDAFX%" == "" (
echo "%CL%" %INCLUDES% %DEFINES% %CLFLAGS% /Yc"stdafx.h" stdafx.cpp %REPORT% ^>^> %MSGFILE% >>%OUTFILE%
)

echo "%CL%" %INCLUDES% %DEFINES% %CLFLAGS% %U_STDAFX% @c_cpp.txt %REPORT% ^>^> %MSGFILE% >>%OUTFILE%

if NOT "%RCFILE%" == "" (
echo "%RC%" %INCLUDES% %DEFINES% %RCFLAGS% %RCFILE% ^>^> %MSGFILE% >>%OUTFILE%
)

echo "%LINK%" %LIBFLAG% %LINKFLAGS% %LIBS% %RESFILE% @obj_lib.txt %REPORT% ^>^> %MSGFILE% >>%OUTFILE%

echo pause >>%OUTFILE%

::****************************************************************************

pause

Как видно, этот файл генерит другой командный файл a.cmd, с содержимым вида:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
::*** Параметры компиляции: 
::MODE = "Release" 
::RCFILE = "main.rc" 
::LIBFLAG = "" 
::BINFILE = "Release\lional.exe" 
::UNICODE = "" 
::U_STDAFX = /Yu"stdafx.h" 
::SYSTEM = WINDOWS 
:: 
::*** Переменные окружения: 
::PATH = "C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Microsoft SQL Server\90\Tools\binn\;C:\Program Files\UltraEdit32" 
::INCLUDE = "" 
::LIB = "" 
:: 
::*** Наши переменные: 
::VS = "C:\Program Files\Microsoft Visual Studio" 
::VCPP = "C:\Program Files\Microsoft Visual Studio\VC98" 
::BIN = "C:\Program Files\Microsoft Visual Studio\VC98\Bin" 
::CL = "C:\Program Files\Microsoft Visual Studio\VC98\Bin\cl.exe" 
::RC = "C:\Program Files\Microsoft Visual Studio\VC98\Bin\rc.exe" 
::LINK = "C:\Program Files\Microsoft Visual Studio\VC98\Bin\link.exe" 
::INCLUDES = /I"C:\Program Files\Microsoft Visual Studio\VC98\Include" /I"C:\Program Files\Microsoft Visual Studio\VC98\MFC\Include" /I"C:\Program Files\Microsoft Visual Studio\VC98\ATL\Include" 
::LIBS = /LIBPATH:"C:\Program Files\Microsoft Visual Studio\VC98\LIB" /LIBPATH:"C:\Program Files\Microsoft Visual Studio\VC98\MFC\LIB" 
::DEFINES = /D "WIN32" /D "_WINDOWS"  /D "_MBCS" /D "_AFXDLL" /D "NDEBUG" 
::CLFLAGS = /O2 /MD /GX /W3 /FD /c /nologo /Fo"Release/" /Fd"Release/" /Fp"Release\Release.pch" 
::RCFLAGS = /L 0x409 /Fo"Release\Release.res" 
::LINKFLAGS = /MACHINE:I386 /NOLOGO /OUT:"Release\lional.exe" /INCREMENTAL:NO /SUBSYSTEM:WINDOWS /NODEFAULTLIB:"LIBC" /PDB:"Release\Release.pdb" 
:: 
::*** Служебные файлы: 
::RESFILE = "Release\Release.res" 
::PCHFILE = "Release\Release.pch" 
::PDBFILE = "Release\Release.pdb" 
:: 
::*** Команды: 
echo. > a.a 
"C:\Program Files\Microsoft Visual Studio\VC98\Bin\cl.exe" /I"C:\Program Files\Microsoft Visual Studio\VC98\Include" /I"C:\Program Files\Microsoft Visual Studio\VC98\MFC\Include" /I"C:\Program Files\Microsoft Visual Studio\VC98\ATL\Include" /D "WIN32" /D "_WINDOWS"  /D "_MBCS" /D "_AFXDLL" /D "NDEBUG" /O2 /MD /GX /W3 /FD /c /nologo /Fo"Release/" /Fd"Release/" /Fp"Release\Release.pch" /Yc"stdafx.h" stdafx.cpp /nologo >> a.a 
"C:\Program Files\Microsoft Visual Studio\VC98\Bin\cl.exe" /I"C:\Program Files\Microsoft Visual Studio\VC98\Include" /I"C:\Program Files\Microsoft Visual Studio\VC98\MFC\Include" /I"C:\Program Files\Microsoft Visual Studio\VC98\ATL\Include" /D "WIN32" /D "_WINDOWS"  /D "_MBCS" /D "_AFXDLL" /D "NDEBUG" /O2 /MD /GX /W3 /FD /c /nologo /Fo"Release/" /Fd"Release/" /Fp"Release\Release.pch" /Yu"stdafx.h" @c_cpp.txt /nologo >> a.a 
"C:\Program Files\Microsoft Visual Studio\VC98\Bin\rc.exe" /I"C:\Program Files\Microsoft Visual Studio\VC98\Include" /I"C:\Program Files\Microsoft Visual Studio\VC98\MFC\Include" /I"C:\Program Files\Microsoft Visual Studio\VC98\ATL\Include" /D "WIN32" /D "_WINDOWS"  /D "_MBCS" /D "_AFXDLL" /D "NDEBUG" /L 0x409 /Fo"Release\Release.res" main.rc >> a.a 
"C:\Program Files\Microsoft Visual Studio\VC98\Bin\link.exe"  /MACHINE:I386 /NOLOGO /OUT:"Release\lional.exe" /INCREMENTAL:NO /SUBSYSTEM:WINDOWS /NODEFAULTLIB:"LIBC" /PDB:"Release\Release.pdb" /LIBPATH:"C:\Program Files\Microsoft Visual Studio\VC98\LIB" /LIBPATH:"C:\Program Files\Microsoft Visual Studio\VC98\MFC\LIB" Release\Release.res @obj_lib.txt /nologo >> a.a 
pause 

Теперь уже запускаем этот файл (такое разделение удобно для контроля за значениями объявленных переменных) и получаем файл отчета a.a типа:

stdafx.cpp
About.cpp
Main.cpp
MainDoc1.cpp
MainDoc2.cpp
MainFrame.cpp
ChildFrame.cpp
Generating Code...

Т.е. компиляция прошла удачно. Перед этим создаем два файла со списками компилируемых модулей:
c_cpp.txt и obj_lib.txt . Их названия говорят сами за себя. В моем примере их содержимое было таким:

для c_cpp.txt :

About.cpp
Main.cpp
Docs\MainDoc1.cpp
Docs\MainDoc2.cpp
Frames\MainFrame.cpp
Frames\ChildFrame.cpp

и для obj_lib.txt :

Release\About.obj
Release\Main.obj
Release\MainDoc1.obj
Release\MainDoc2.obj
Release\MainFrame.obj
Release\ChildFrame.obj
Release\stdafx.obj

Файл c_cpp.txt удобно создавать с помощью команды dir/b *.cpp>c_cpp.txt . А второй файл строится на основе первого. Главное, удалить строку с именем stdafx.cpp в первом файле, так как он компилируется отдельно.

Все, теперь мы имеем и объектные и исполнимый файл, в данном случае lional.exe, так что задача на данном уровне решена. Следует еще отметить, что, например в 6-й студии, возможно, придется скопировать файл mspdb60.dll в каталог C:\Program Files\Microsoft Visual Studio\VC98\Bin\ из каталога C:\Program Files\Microsoft Visual Studio\Common60\MSDev98\Bin\ (Для VB98 так и сделано самой студией VS6). Аналогично, следует проделать подобную процедуру с компилятором ресурсов (файлы
RC.EXE и RCDLL.DLL). Иначе придется использовать переменную окружения PATH.

Кстати, если вас интересуют переменные окружения, то для сбора информации о них можно использовать командный файл, скажем env.cmd типа:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
set OUTPUTFILE=env.log

echo ALLUSERSPROFILE = "%ALLUSERSPROFILE%" >%OUTPUTFILE%
echo APPDATA = "%APPDATA%" >>%OUTPUTFILE%
echo CommonProgramFiles = "%CommonProgramFiles%" >>%OUTPUTFILE%
echo COMPUTERNAME = "%COMPUTERNAME%" >>%OUTPUTFILE%
echo ComSpec = "%ComSpec%" >>%OUTPUTFILE%
echo HOMEDRIVE = "%HOMEDRIVE%" >>%OUTPUTFILE%
echo HOMEPATH = "%HOMEPATH%" >>%OUTPUTFILE%
echo INCLUDE = "%INCLUDE%" >>%OUTPUTFILE%
echo LIB = "%LIB%" >>%OUTPUTFILE%
echo LIBPATH = "%LIBPATH%" >>%OUTPUTFILE%
echo LOGONSERVER = "%LOGONSERVER%" >>%OUTPUTFILE%
echo NUMBER_OF_PROCESSORS = "%NUMBER_OF_PROCESSORS%" >>%OUTPUTFILE%
echo OS = "%OS%" >>%OUTPUTFILE%
echo Os2LibPath = "%Os2LibPath%" >>%OUTPUTFILE%
echo Path = "%Path%" >>%OUTPUTFILE%
echo path = "%path%" >>%OUTPUTFILE%
echo BOOST_PATH = "%BOOST_PATH%" >>%OUTPUTFILE%
echo LEM_PATH = "%LEM_PATH%" >>%OUTPUTFILE%
echo PATHEXT = "%PATHEXT%" >>%OUTPUTFILE%
echo PROCESSOR_ARCHITECTURE = "%PROCESSOR_ARCHITECTURE%" >>%OUTPUTFILE%
echo PROCESSOR_IDENTIFIER = "%PROCESSOR_IDENTIFIER%" >>%OUTPUTFILE%
echo PROCESSOR_LEVEL = "%PROCESSOR_LEVEL%" >>%OUTPUTFILE%
echo PROCESSOR_REVISION = "%PROCESSOR_REVISION%" >>%OUTPUTFILE%
echo ProgramFiles = "%ProgramFiles%" >>%OUTPUTFILE%
echo SystemDrive = "%SystemDrive%" >>%OUTPUTFILE%
echo SystemRoot = "%SystemRoot%" >>%OUTPUTFILE%
echo TEMP = "%TEMP%" >>%OUTPUTFILE%
echo TMP = "%TMP%" >>%OUTPUTFILE%
echo USERDOMAIN = "%USERDOMAIN%" >>%OUTPUTFILE%
echo USERNAME = "%USERNAME%" >>%OUTPUTFILE%
echo USERPROFILE = "%USERPROFILE%" >>%OUTPUTFILE%
echo VSCOMNTOOLS = "%VSCOMNTOOLS%" >>%OUTPUTFILE%
echo windir = "%windir%" >>%OUTPUTFILE%
echo _ACP_ATLPROV = "%_ACP_ATLPROV%" >>%OUTPUTFILE%
echo _ACP_INCLUDE = "%_ACP_INCLUDE%" >>%OUTPUTFILE%
echo _ACP_LIB = "%_ACP_LIB%" >>%OUTPUTFILE%
echo _ACP_PATH = "%_ACP_PATH%" >>%OUTPUTFILE%
echo DATE = "%DATE%" >>%OUTPUTFILE%
echo TIME = "%TIME%" >>%OUTPUTFILE%

В моем случае env.log будет:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
ALLUSERSPROFILE = "C:\Documents and Settings\All Users" 
APPDATA = "C:\Documents and Settings\Administrator\Application Data" 
CommonProgramFiles = "C:\Program Files\Common Files" 
COMPUTERNAME = "SERVER" 
ComSpec = "C:\WINDOWS\system32\cmd.exe" 
HOMEDRIVE = "C:" 
HOMEPATH = "\Documents and Settings\Administrator" 
INCLUDE = "" 
LIB = "" 
LIBPATH = "" 
LOGONSERVER = "\\SERVER" 
NUMBER_OF_PROCESSORS = "4" 
OS = "Windows_NT" 
Os2LibPath = "" 
Path = "C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Microsoft SQL Server\90\Tools\binn\;C:\Program Files\UltraEdit32" 
path = "C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Microsoft SQL Server\90\Tools\binn\;C:\Program Files\UltraEdit32" 
BOOST_PATH = "" 
LEM_PATH = "" 
PATHEXT = ".COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH" 
PROCESSOR_ARCHITECTURE = "x86" 
PROCESSOR_IDENTIFIER = "x86 Family 15 Model 2 Stepping 5, GenuineIntel" 
PROCESSOR_LEVEL = "15" 
PROCESSOR_REVISION = "0205" 
ProgramFiles = "C:\Program Files" 
SystemDrive = "C:" 
SystemRoot = "C:\WINDOWS" 
TEMP = "D:\Temp" 
TMP = "D:\Temp" 
USERDOMAIN = "SERVER" 
USERNAME = "Administrator" 
USERPROFILE = "C:\Documents and Settings\Administrator" 
VSCOMNTOOLS = "" 
windir = "C:\WINDOWS" 
_ACP_ATLPROV = "" 
_ACP_INCLUDE = "" 
_ACP_LIB = "" 
_ACP_PATH = "" 
DATE = "10.09.2008" 
TIME = " 9:32:41,65" 

Параметры компиляции, например, для Debug версии можно подсмотреть в лог-файлах студии для успешно скомпилированных проектов типа *.plg или BuildLog.htm .

Данный командный файл ExeR.cmd не является полностью универсальным, над этим я работаю. Скажем, не решена проблема 8-ой студии, компиляция без ее инсталляции не хочет происходить. Более того, скомпилированный в ней exe-шник не желает запускаться даже при наличии файлов поддержки типа mfc80.dll и т.п. Надеюсь, кто-нибудь подскажет решение…
...
Рейтинг: 0 / 0
Создание obj файла с помощью cl.exe
    #35532712
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EmeryПроблему можно поставить более глобально.
Во первых, пожалуйста, обрамляй публикуемые куски исходников тэгом SRC, а текстовые файлы тэгом FIXED. Твои сообщения будет проще читать.
Во вторых, все что ты насочинял совершенно не нужно, задача компиляции решается намного проще. Открой для себя семейство утилит make . Оно тебе даст возможность и условной компиляции и не будет перекомпилировать те исходники которые не изменялись и многое-многое другое. При нужде можно и с каталогами играться и условную компиляцию делать и черта в ступе.
Если ты предпочитаешь работать с микрософтовскими трансляторами, то можешь использовать nmake. Студия умеет выгружать проект в makefile с которым работает nmake (но там будет много лишней фигни, руками написать обычно удобнее). А если у тебя нет страсти к микрософтовским продуктам, то лучше взять GNU Make А здесь документация на него
Твой проект на gmake диалекте запросто описывается вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SRC = About.cpp Main.cpp Docs\MainDoc1.cpp Docs\MainDoc2.cpp \
         Frames\MainFrame.cpp Frames\ChildFrame.cpp
OBJ = $(SRC:.cpp=.obj)
INCLUDE = /I"%VCPP%\Include" /I"%VCPP%\atlmfc\Include" /I"%VCPP%\PlatformSDK\Include"
CFLAGS = /O2 /MD /GX /W3 /FD /c /nologo 
LIB = /LIBPATH:"%VCPP%\LIB" /LIBPATH:"%VCPP%\atlmfc\LIB" /LIBPATH:"%VCPP%\PlatformSDK\LIB"
LFLAGS = /MACHINE:I386 /NOLOGO

Project.exe: $(OBJ)
     link /OUT:$@ $(LIB) $(LFLAGS) $<

%.obj : %.cpp
     cl /c $(INCLUDE) $(CFLAGS) $<

Для nmake будет что-то похожее, но чуть более многословное.
...
Рейтинг: 0 / 0
Создание obj файла с помощью cl.exe
    #35532802
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl wrote:
> Во вторых, все что ты насочинял совершенно не нужно, задача компиляции
> решается намного проще. Открой для себя семейство утилит *make*. Оно

Это он чего, свой аналого make-а накорябал на шеле ? Крута !
Я-то не читал, многа букаф...
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Создание obj файла с помощью cl.exe
    #35532934
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivЭто он чего, свой аналого make-а накорябал на шеле ? Крута !Причем на виндовом.
...
Рейтинг: 0 / 0
Создание obj файла с помощью cl.exe
    #35533287
Emery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlВо первых, пожалуйста, обрамляй публикуемые куски исходников тэгом SRC, а текстовые файлы тэгом FIXED. Твои сообщения будет проще читать.

Ok, замечание принимается.

White OwlВо вторых, все что ты насочинял совершенно не нужно, задача компиляции решается намного проще. Открой для себя семейство утилит make . Оно тебе даст возможность и условной компиляции и не будет перекомпилировать те исходники которые не изменялись и многое-многое другое. При нужде можно и с каталогами играться и условную компиляцию делать и черта в ступе.

Ну да, нажал enter’ом на *.dsw файл, далее Alt-B / U / Enter и проект скомпилирован. Куда уже проще? И nmake, и ему подобные, здесь даже не нужны. Только, никто еще не отменял разнообразия. Я смотрел код nmake.c . Ну и что? Все, в конечном итоге завязано на компиляторы командной строки. Тогда, почему я не могу использовать их непосредственно? “многа букаф”? В программе на си их не меньше. Я ведь писал, почему не хочу использовать make-утилиты. Считайте, что я предложил третий способ компиляции, хотя понятно, что для собственно компиляции достаточного одного. Откровенно говоря, здесь я не столько отвечал на вопрос топика, сколько опубликовал информацию, которую сам, в свое время, долго и нудно искал в Интернете. Надеюсь, поисковики ее проиндексируют. Если она тут не в тему, можете удалить ее, я найду другое место…
...
Рейтинг: 0 / 0
Создание obj файла с помощью cl.exe
    #35533647
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Emery wrote:

> Я ведь писал, почему не хочу использовать make-утилиты.
А можно ещё раз повторить коротко и сжато, почему ?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Создание obj файла с помощью cl.exe
    #35533816
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivА можно ещё раз повторить коротко и сжато, почему ?он их ниасилил.
...
Рейтинг: 0 / 0
Создание obj файла с помощью cl.exe
    #35533828
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EmeryКак видно, этот файл генерит другой командный файл a.cmd, с содержимым вида:

Данный командный файл ExeR.cmd не является полностью универсальным, над этим я работаю.
...
Рейтинг: 0 / 0
Создание obj файла с помощью cl.exe
    #35535013
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EmeryНу да, нажал enter’ом на *.dsw файл, далее Alt-B / U / Enter и проект скомпилирован.Ты забыл еще написать что надо подождать пока студия загрузиться между запуском dsw и возможностью нажать Alt+B. И для модификации параметров проекта надо запускать ту самую студию и шариться по ее менюшкам и диалогам только для того чтобы поставить или убрать один единственный ключ компилятора.
EmeryКуда уже проще?Набрать в командной строке make и нажать Enter. Никакого ожидания студии, никакой мыши, результат компиляции сразу на экране и всегда точно знаешь в каком режиме компилировался тот или иной исходник.

EmeryЯ смотрел код nmake.c . Ну и что? Все, в конечном итоге завязано на компиляторы командной строки. Тогда, почему я не могу использовать их непосредственно? “многа букаф”?Да можешь конечно, если хочешь еще разок изобрести велосипед - удачи.
И кстати, зачем смотреть код nmake.c? Им пользоваться надо.
EmeryЯ ведь писал, почему не хочу использовать make-утилиты.Они тебе "не показались достаточно удобными и эффективными"? Ну что я могу сказать... Ты их просто использовать не умеешь. Какая у тебя с ними проблема возникла что ты не смог ее решить? Переключаться между несколькими компиляторами? Добавь в свой makefile такие строчки:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
I_WILL_USE=VC6

ifeq ( $(I_WILL_USE), VC6)
     PATH = %VC6%\bin
     INCLUDE = %VC6%\INCLUDE
     LIB = %VC6%\LIB
else ifeq ($(I_WILL_USE), VC2005)
     PATH = %VC2005%\bin
     INCLUDE = %VC2005%\INCLUDE
     LIB = %VC2005%\LIB
else
     # настройки для третьего компилятора
endif

Чего тебе еще не хватает?
...
Рейтинг: 0 / 0
Создание obj файла с помощью cl.exe
    #35535530
Emery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv> Я ведь писал, почему не хочу использовать make-утилиты.
А можно ещё раз повторить коротко и сжато, почему ?
По большому счету я не вижу принципиальной разницы между обсуждаемыми тремя способами компиляции. Естественно, вы не будете компилировать свой проект всеми этими способами одновременно. Выберете один тот, который вам больше нравится. Хорошо, пусть компиляция с помощью make-утилит самая крутая. И что, вы никогда не будете компилировать из самой студии? Будете, если в данном конкретном случае, так будет целесообразней. И дело не в том, что я не осилил nmake, gmake или cmake. Просто я подумал, что если все сводится к простой компиляции из командной строки, то почему бы этого не сделать явно. Во-первых, такой способ мне показался более естественным и красивым, а во-вторых, меня сильно разозлило, что ясной и четкой информации по этому вопросу я не нашел. Вот и решил разобраться в этом вопросе до конца. И не жалею. Кое-что новое открыл для себя. Всегда не вредно знать альтернативные способы, может быть они когда-нибудь и пригодятся. Ну, это не серьезно превращать программирование в спорт. Мол, я скомпилировал програмулину за 2 секунды, а я за полторы. Куда важнее разбираться в сути вещей, даже если на это потребуется дополнительное время.

White Owl> Да можешь конечно, если хочешь еще разок изобрести велосипед - удачи.
И кстати, зачем смотреть код nmake.c? Им пользоваться надо.
Велосипеды иногда не вредно изобретать, особенно если информация по ним не слишком общедоступна. В науке, да и в программировании, это типичная ситуация, когда легче какой-то результат переоткрыть, чем найти, даже когда точно известно, что он существует. Ну, посидел я пару дней над своим командным файлом в рабочее время, получил что хотел, ну и что? Меня больше волнует вопрос, хотя он и не принципиален, как скомпилировать проект с помощью 8-й студии (не важно, с помощью *make-утилиты или командного файла), при условии, что доступны все необходимые файлы этой студии, но сама VS8 не инсталлирована на компьютере. Если вы все такие крутые, то подскажите ответ на этот вопрос. И, я уже спрашивал, как запустить скомпилированный в ней exe-шник, который не желает запускаться даже при наличии файлов поддержки типа mfc80.dll и т.п. Очевидно, это связано с записями в реестре, которая делает 8-я студия при инсталляции. Но это свойство 8 и, вероятно, 9-й студии также, мне очень не нравиться.

nmake.c я смотрел из любопытства, так как еще не определился окончательно со своим стилем программирования в с/с++. А смотрю я очень много разного кода, благо, в Интернете этого добра достаточно.

Ну и, в заключение, *make-утилиты меня вполне устраивают, я ничего не имею против них, хотя VS7 и выше перестали поддерживать это средство на уровне оболочки (IDE). Пусть и несколько заумное, но свое дело делает достаточно хорошо…
...
Рейтинг: 0 / 0
Создание obj файла с помощью cl.exe
    #35537169
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EmeryИ что, вы никогда не будете компилировать из самой студии?Никогда.
Студию (да и вообще любые IDE) я запускаю только на попробовать. Мне они не удобны.

EmeryБудете, если в данном конкретном случае, так будет целесообразней. И дело не в том, что я не осилил nmake, gmake или cmake.Прошу прощения, но cmake в этом списке лишний. cmake это не сборщик проектов, это создаватель проектов. У gnu make и nmake есть некоторая разница в описании проектов (разные диалекты по существу). Ну и для тех кто по каким-то причинам желает собирать свой проект и через gmake и через nmake и придумали CMake. Это совершенно отдельный язык описания проектов. CMake после запуска читает свой сценарий проекта и создает новый makefile на том диалекте который ты заказал. Потом уже скармливаешь полученый makefile своему gmake или nmake и те занимаются собственно сборкой.

EmeryПросто я подумал, что если все сводится к простой компиляции из командной строки, то почему бы этого не сделать явно.У твоего подхода есть несколько существенных минусов.
1) Ты не можешь в батнике проверить какой из исходников изменился и перекомпилировать только измененные. На маленьких проектах это не кажется таким уж большим делом, но когда количество твоих исходников дойдет до десятка-полутора...
2) Ты в нескольких разных местах прописываешь имена исходников, объектников и тд и тп. Если надо добавить в проект новый файл (или удалить) тебе прийдется пробежаться по всем своим спискам и поправить их все. А если ошибешься?
3) Кода у тебя ручного очень много, для исправления одного ключа прийдется долго бегать по батнику(-ам) и искать где ты задаешь параметры компиляции.

EmeryВо-первых, такой способ мне показался более естественным и красивым, а во-вторых, меня сильно разозлило, что ясной и четкой информации по этому вопросу я не нашел. Вот и решил разобраться в этом вопросе до конца. И не жалею. Кое-что новое открыл для себя. Всегда не вредно знать альтернативные способы, может быть они когда-нибудь и пригодятся. Ну, это не серьезно превращать программирование в спорт. Мол, я скомпилировал програмулину за 2 секунды, а я за полторы. Куда важнее разбираться в сути вещей, даже если на это потребуется дополнительное время.С ЭТИМ никто не спорит :) А доскональный разбор вопроса только приветсвуется.

EmeryЕсли вы все такие крутые, то подскажите ответ на этот вопрос. И, я уже спрашивал, как запустить скомпилированный в ней exe-шник, который не желает запускаться даже при наличии файлов поддержки типа mfc80.dll и т.п. Очевидно, это связано с записями в реестре, которая делает 8-я студия при инсталляции. Но это свойство 8 и, вероятно, 9-й студии также, мне очень не нравиться.Это одна из причин, по которой я не использую микрософтовские компиляторы.
А твоя проблема в манифестах. При компиляции VC2005 и дальше, записывая в исполняемый файл имя dll добавляет теперь еще кучу опознавательных знаков этой dll. Делается это при помощи специальной гадости под названием manifest. Вот читай этот набор статей: http://msdn.microsoft.com/en-us/library/ms235542.aspx
...
Рейтинг: 0 / 0
Создание obj файла с помощью cl.exe
    #35537797
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmo wrote:

> А можно ещё раз повторить коротко и сжато, почему ?
> он их ниасилил.

Ну у меня как бы тоже были трудности с ними. А именно -
я их раз наверное 5 учил на короткое время и потом напроч забывал.

Но это же не говорит о том, что свои надо делать.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Создание obj файла с помощью cl.exe
    #35537800
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl wrote:

> Я смотрел код nmake.c . Ну и что? Все, в конечном итоге завязано на

Я еще хочу напомнить о существовании ещё порядка 5 хороших
make-систем, начиная с анта и кончая CMake-ом.
Это если классический make не нравится. У него кстати
есть и недостатки - зависимость на внешний шелл.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Создание obj файла с помощью cl.exe
    #35537804
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Emery wrote:

> По большому счету я не вижу принципиальной разницы между обсуждаемыми
> тремя способами компиляции. Естественно, вы не будете компилировать свой

Принципиальная разница здесь - что make знают немного больше людей, чем ты один.
И пользуются тоже.

> Велосипеды иногда не вредно изобретать, особенно если информация по ним
> не слишком общедоступна. В науке, да и в программировании, это типичная

В общем, я понял. Он "прётся". Ну что ж, может это действительно не так
и плохо, по крайней мере лучше, чем не уметь пускать компилятор кроме как
из IDE.

> скомпилировать проект с помощью 8-й студии (не важно, с помощью
> *make-утилиты или командного файла), при условии, что доступны все
> необходимые файлы этой студии, но сама VS8 *не инсталлирована* на
> компьютере.

Не понял. Компилятор и линкер от неё есть ? они нужны.
Кроме того, на nmake они уже плюнули, и у них уже другой билдер.

> вопрос. И, я уже спрашивал, как запустить скомпилированный в ней
> exe-шник, который не желает запускаться даже при наличии файлов
> поддержки типа mfc80.dll и т.п. Очевидно, это связано с записями в
> реестре, которая делает 8-я студия при инсталляции. Но это свойство 8 и,
> вероятно, 9-й студии также, мне очень не нравиться.

Чего ? Это ты что-то невероятное говоришь. Оно конечно, после
висты от МС всего можно ожидать, но пока сам не увижу, не поверю.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Создание obj файла с помощью cl.exe
    #35537810
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl wrote:

> А твоя проблема в манифестах. При компиляции VC2005 и дальше, записывая
> в исполняемый файл имя dll добавляет теперь еще кучу опознавательных
> знаков этой dll. Делается это при помощи специальной гадости под
> названием manifest.

Там же это всё отключается ....
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Создание obj файла с помощью cl.exe
    #35539099
Emery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl> Студию (да и вообще любые IDE) я запускаю только на попробовать. Мне они не удобны.
А как же тогда отладка, проход по найденным ошибкам, быстрая навигация по файлам? Есть, правда, у IDE и недостатки, например, слабая подсветка синтаксиса. Отдельные файлы проекта я предпочитаю редактировать в Source Insight Program Editor. Весьма неплохой редактор, может, например, хавать много-мегабайтные листинги, в том числе на ассемблере. Если надо работать с длинными строками (с нумерацией колонок) то весьма хорош UltraEdit Professional Text/Hex Editor (обрабатывает строки длиной до 20 Кб). Но это так, к слову. Это к тому, что GUI студии не идеально. Но совсем без IDE тоскливо.

White OwlПрошу прощения, но cmake в этом списке лишний.
Хорошо, согласен. Руки еще не дошли вникнуть в него серьезно. Информацию по *make-утилитам я собираю, чтобы при явной необходимости воспользоваться ими.

White OwlУ твоего подхода есть несколько существенных минусов.
Естественно, что в представленном виде он не заменит профессиональные *make средства. К этому я и не стремился. Хотя для обычных случаев он меня вполне устраивает. Просто был небольшой пробел в информации, и были найдены некоторые ответы. Вопрос эффективности, это уже другая песня.

White OwlТы не можешь в батнике проверить какой из исходников изменился и перекомпилировать только измененные.
Не буду спорить. Пока, действительно, вопрос времени не принципиален. До сверхкрупных проектов еще далеко, а те, что есть можно компилировать любым способом, без особой разницы. Хотя есть у меня желание проверить, а нельзя ли эту проблему решить опциями компилятора. Их там достаточно много, чтобы поэкспериментировать. Во всяком случае, компиляция с нуля у меня занимала где-то на секунду больше времени, чем просто перекомпиляция. Однако компилировать собственные проекты мне все же удобней в IDE студии.

White OwlТы в нескольких разных местах прописываешь имена исходников, объектников и тд и тп. Если надо добавить в проект новый файл (или удалить) тебе прийдется пробежаться по всем своим спискам и поправить их все. А если ошибешься?
Да нет, с чего ты взял? В верхушке ExeR.cmd (в секции «Параметры компиляции») прописываются только имя конечного файла (*.exe или *.lib файла, до dll-ки еще руки не дошли) и основного файла ресурсов (*.rc). Список же собственно си и си++ файлов задается в отдельном текстовом файле. Получаю его командой типа:
Код: plaintext
dir/b *.cpp>c_cpp.txt
. Затем копирую его в obj_lib.txt, заменяю расширения *.cpp на *.obj и приписываю в начале всех строк каталог «Release\». В первом файле удаляю строку с «stdafx.cpp», если она есть, а во втором добавляю пути на внешние lib-файлы, если они есть. В принципе никакого повтора нет. Понятно, что добавление и удаление файлов надо делать вручную. Но разве это проблема? Ошибка, не катастрофа, компилятор сразу сообщит где и что (у меня это файл а.а). Подобная проблема легко выявляется и устраняется.

White OwlКода у тебя ручного очень много, для исправления одного ключа прийдется долго бегать по батнику(-ам) и искать где ты задаешь параметры компиляции
Ну почему, я настроил «Source Insight 3» на свой *.cmd файл, он дает великолепную подсветку. Ключи компиляторов и линковщика, как впрочем, и все остальное, у меня разбиты по секциям, все ищется быстро. По крайней мере, мне все легко и понятно. Ну а любой может настроить командный файл под себя. Еще раз повторю, ведь это естественно компилировать из командной строки с помощью командного файла, несмотря на то, что *make-средства более универсальные и пусть даже более эффективные. Я настроил свой батник на мои сегодняшние нужды и мне его вполне хватает. Нужно будет расширить его возможности, проблем не будет, так как его структура достаточно очевидная.

White OwlА твоя проблема в манифестах.
MasterZivТам же это всё отключается ....
Спасибо за наводку, думаю, достаточно информации, чтобы полностью разобраться…

White Owlлучше взять GNU Make А здесь документация на него
Спасибо и за эту информацию. Все скачал, буду разбираться и с этим…

MasterZivНо это же не говорит о том, что свои надо делать.
Странные, вы ребята. Ну, давайте сейчас наезжать на Мелкософт, зачем он предоставил возможность компиляции из графической оболочки студии, ведь White Owl «никогда» не будет ее использовать. Он не будет, а я буду. Ну что из того? Меня, откровенно говоря, удивляет такой дотошный «разбор полетов» по пустяковому, в общем, поводу. Мало ли кто, какой батник написал, и зачем он это сделал? Это средство для того и служит, чтобы решать свои частные индивидуальные проблемы. Ну, получился файлик с претензией на некую локальную универсальность, ну флаг в руки его автору. Я бы даже особого внимания не обратил бы на этот факт, если бы автором был не я. На цвет и вкус товарищей нет. У каждого программиста свое видение концепции программирования. Хорошо еще, что мы не обсуждаем стили программирования, вот был бы мордобой! А, в конечном счете, каждый бы остался при своем мнении. Я, например, предпочитаю знать о разных возможностях, но выбирать в каждом конкретном случае то, что мне больше подходит или, просто, больше нравится, пусть даже и менее эффективно.

MasterZivПринципиальная разница здесь - что make знают немного больше людей, чем ты один.
И пользуются тоже.
Речь шла о способности компилировать проекты, а не об известности этих способов. Любым из этих трех способов можно скомпилировать любой проект, несмотря на то, что последний способ вполне возможно придется дорабатывать (что не сложно). Причем даже речь не идет об эффективности, только о принципиальной возможности. Вопрос топика был до безобразия, до неприличия :) слишком прост, «Создание obj файла с помощью cl.exe». На него вполне ответили в первых нескольких комментариях.
Чтобы как-то оживить дискуссию и заодно опубликовать свои наработки по непосредственной компиляции я вышел со своим сообщением. Причем тему данной ветки пришлось абстрагировать, чтобы было интересней. Думаю, автор вопроса получил информации более чем достаточно. Вот он пусть и выбирает, что ему больше подходит. Я даже допускаю, ему может быть «впадлу» разбираться с *make-утилитами. Не зря ж вы пишете, что MasterZivНу у меня как бы тоже были трудности с ними. А именно - я их раз наверное 5 учил на короткое время и потом напроч забывал. Насколько я понял, Proger’a89 привлекала прежде всего непосредственная компиляция из командной строки, может быть даже одноразовая. Вот поэтому я и предложил, правда, может быть немного раздутый вариант компиляции из командной строки, тем более что эта тема меня интересует также. Вы же: «это неправильный способ компиляции, так делать нельзя!» (конечно, я утрирую :) ). Если это так возмущает народ, значит нужно компилировать таким способом втихаря, чтобы никто не знал :) . Какой-то «театр абсурда».
...
Рейтинг: 0 / 0
Создание obj файла с помощью cl.exe
    #35540490
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Emery White Owl> Студию (да и вообще любые IDE) я запускаю только на попробовать. Мне они не удобны.
А как же тогда отладка, проход по найденным ошибкам, быстрая навигация по файлам?Для первого логи, для второго текстовый редактор, для третьего текстовый редактор встроенный в файловый менеджер.
Совсем без IDE не тоскливо, а очень замечательно. Не привязан к определенному набору утилит/хоткеев. К тому же, IDE в 90% заточена на один единственный язык. А у меня одновременно в работе до полудюжины.

Emery White OwlТы в нескольких разных местах прописываешь имена исходников, объектников и тд и тп. Если надо добавить в проект новый файл (или удалить) тебе прийдется пробежаться по всем своим спискам и поправить их все. А если ошибешься?
Да нет, с чего ты взял? В верхушке ExeR.cmd (в секции «Параметры компиляции») прописываются только имя конечного файла (*.exe или *.lib файла, до dll-ки еще руки не дошли) и основного файла ресурсов (*.rc). Список же собственно си и си++ файлов задается в отдельном текстовом файле. Получаю его командой типа:
Код: plaintext
dir/b *.cpp>c_cpp.txt
. Затем копирую его в obj_lib.txt, заменяю расширения *.cpp на *.obj и приписываю в начале всех строк каталог «Release\». В первом файле удаляю строку с «stdafx.cpp», если она есть, а во втором добавляю пути на внешние lib-файлы, если они есть.Вот вот :) А я просто указываю один или несколько списков с исходными файлами, и прописываю правила "*.cpp превращаются в *.obj по такому то закону", "*.rc превращаются в *.res по другому закону", и так для всех типов файлов участвующих в проекте. Никакого копирования и переименования, этим всем занимается сам gmake по правилам которые я ему задал.

EmeryЕще раз повторю, ведь это естественно компилировать из командной строки с помощью командного файла, несмотря на то, что *make-средства более универсальные и пусть даже более эффективные. Я настроил свой батник на мои сегодняшние нужды и мне его вполне хватает. Нужно будет расширить его возможности, проблем не будет, так как его структура достаточно очевидная. Так мы ж не спорим с этим :) Мы просто подталкиваем к следующему шагу.

EmeryМеня, откровенно говоря, удивляет такой дотошный «разбор полетов» по пустяковому, в общем, поводу.Не удивляйся. У нас тут редко бывает молодежь с мозгами. А таких поучать намного приятнее и веселее чем студентов требующих чтобы за них решили курсовую.
...
Рейтинг: 0 / 0
Создание obj файла с помощью cl.exe
    #35541040
Emery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlНикакого копирования и переименования, этим всем занимается сам gmake по правилам которые я ему задал.
Ну так gmake надо еще скачать и разобраться в нем, тогда как на уровне командного процессора все достаточно просто и очевидно. А если влом копировать ручками, то средства cmd.exe позволяют автоматизировать этот процесс, разве что внешние lib-файлы нужно указывать явно, так как, в общем случае, их наличие или отсутствие непредсказуемо.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Создание obj файла с помощью cl.exe
    #37813347
Зоркий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!

Можете помочь с такой темкой?

WinExec("cmd.exe /C vsvars32.bat && cl.exe New_file.cpp > error.txt && exit",SW_HIDE);
//произвести компиляцию кода С++ и все ошибки при их возникновении записать в файл error.txt

можно ли это записать так? ->
system("1111.bat");

1111.bat - файл бат в котором должно быть условие то что сверху (cmd.exe /C vsvars32.bat && cl.exe New_file.cpp > error.txt && exit)
Как его написать?

И ПОЧЕМУ МОЖЕТ НЕ РАБОТАТЬ WinExec НА НЕКОТОРЫХ БИЛДЕРАХ?
все файлы есть, все файлы в папке с программой.
WinExec работает.
С++ Builder 6
Все это работает на многих компьютерах.

но на некоторых не работает. причем все компы одинаковые и версии программ одни и те же)

был момент такой:
WinExec("cmd.exe /C New_file.exe && exit",SW_SHOW); // запускает созданную прогр. в ком. строке
на тех ПК, на которых не работает та запись, эта запись тоже не срабатывала.
Я записал ее так-
system("1111.bat");

где 1111.bat:

bcc32.exe New_file.cpp
New_file.exe
pause
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Создание obj файла с помощью cl.exe
    #38341414
Alex123_123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Proger89,

Извени за беспокойство, уменя возникла проблема которою давно не могу решить.
Проект создал в VS10, в этом проекте использую библотеки стороней разработки в месте с исходниками...

В чом- же проблема:
Построил по исходникам (dll)
подключил проекту, все ОК!!!!
Подключил все файлы....

Начинаю использовать код, но в строчке указаной строчке или любом визове конструктора любого класа.
Все они должны быть взяты с библиотек....
Handle(WNT_Window) aWNTWindow = new WNT_Window(theGraphicDevice,GetSafeHwnd ());
В заголовочном класе конструктор описан так....

Standard_EXPORT WNT_Window(...... ); //# define Standard_EXPORT __declspec( dllexport )
Я понимаю что в моем случае должно быть
# define Standard_EXPORT __declspec( dllimport )
но в примерах используется # define Standard_EXPORT __declspec( dllexport ) при етом все отлично работает

Какие настройки необходимо сделать чтобы кампилятор увидел описание конструктора...

Подскажи хотябы гения у кого хотябы можно узнать в чем дело...
За рание благодарю!!!!
...
Рейтинг: 0 / 0
Создание obj файла с помощью cl.exe
    #38341512
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex123_123,
Модератор:
Создай новую тему для обсуждения, а не поднимай старую.
...
Рейтинг: 0 / 0
28 сообщений из 28, показаны все 2 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / Создание obj файла с помощью cl.exe
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]