Форум программистов, компьютерный форум, киберфорум
C++: WinAPI
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
3 / 3 / 0
Регистрация: 29.06.2018
Сообщений: 1,137
1

Компиляция консольных программ и приложений с формой в Embarcadero BCC102

27.08.2018, 22:26. Просмотров 1381. Ответов 5
Метки нет (Все метки)


Компиляция консольных программ и приложений с формой в Embarcadero BCC102:
с какими аргументами можно скомпилировать программы (-L , -w ?)


1) оконное: winapi.cpp (из интернета, может, с багами )
C++
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
#include <windows.h>
 
// объявление функций
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
ATOM RegMyWindowClass(HINSTANCE, LPCTSTR);
 
////////////////////////////////////////////////////////////////////////// 
// функция вхождений программы WinMain
int APIENTRY WinMain(HINSTANCE hInstance,
             HINSTANCE         hPrevInstance,
             LPSTR             lpCmdLine,
             int               nCmdShow)
{
 
  // имя будущего класса
  LPCTSTR lpzClass = TEXT("My Window Class!");
 
  // регистрация класса
  if (!RegMyWindowClass(hInstance, lpzClass))
    return 1;
 
  // вычисление координат центра экрана
  RECT screen_rect;
  GetWindowRect(GetDesktopWindow(),&screen_rect); // разрешение экрана
  int x = screen_rect.right / 2 - 150;
  int y = screen_rect.bottom / 2 - 75;
 
  // создание диалогового окна
  HWND hWnd = CreateWindow(lpzClass, TEXT("Dialog Window"), 
    WS_OVERLAPPEDWINDOW | WS_VISIBLE, x, y, 300, 150, NULL, NULL, 
    hInstance, NULL);
 
  // если окно не создано, описатель будет равен 0
  if(!hWnd) return 2; 
 
  // цикл сообщений приложения
  MSG msg = {0};    // структура сообщения
  int iGetOk = 0;   // переменная состояния
  while ((iGetOk = GetMessage(&msg, NULL, 0, 0 )) != 0) // цикл сообщений
  {
    if (iGetOk == -1) return 3;  // если GetMessage вернул ошибку - выход
    TranslateMessage(&msg);    
    DispatchMessage(&msg);
  }
 
  return msg.wParam;  // возвращаем код завершения программы
}
 
////////////////////////////////////////////////////////////////////////// 
// функция регистрации класса окон
ATOM RegMyWindowClass(HINSTANCE hInst, LPCTSTR lpzClassName)
{
  WNDCLASS wcWindowClass = {0};
  // адрес ф-ции обработки сообщений
  wcWindowClass.lpfnWndProc = (WNDPROC)WndProc;
  // стиль окна
  wcWindowClass.style = CS_HREDRAW|CS_VREDRAW;
  // дискриптор экземпляра приложения
  wcWindowClass.hInstance = hInst;
  // название класса
  wcWindowClass.lpszClassName = lpzClassName;
  // загрузка курсора
  wcWindowClass.hCursor = LoadCursor(NULL, IDC_ARROW);
  // загрузка цвета окон
  wcWindowClass.hbrBackground = (HBRUSH)COLOR_APPWORKSPACE;
  return RegisterClass(&wcWindowClass); // регистрация класса
}
 
////////////////////////////////////////////////////////////////////////// 
// функция обработки сообщений
LRESULT CALLBACK WndProc(
  HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
  // выборка и обработка сообщений
  switch (message)
  {
  case WM_LBUTTONUP:
     // реакция на сообщение
    MessageBox(hWnd, TEXT("Вы кликнули!"), TEXT("событие"), 0);
    break;
  case WM_DESTROY:
    PostQuitMessage(0);  // реакция на сообщение
    break;
  default:  
    // все сообщения не обработанные Вами обработает сама Windows
    return DefWindowProc(hWnd, message, wParam, lParam);
  }
  return 0;
}
2) консольное (встроенный пример)
simple.cpp
C++
1
2
3
4
5
6
7
8
9
#include "funcs.h"
int main(void)
{
    const std::string str = GetMessage();
    std::cout << str << std::endl;
 
    const int a = 4;
    PrintResult([=]() { return a + str.length(); });
}
funcs.cpp
C++
1
2
3
4
5
6
#include "funcs.h"
 
std::string GetMessage()
{
    return "Hello world.";
}
funcs.h
C++
1
2
3
4
5
6
#include <string>
#include <iostream>
 
template <typename F>
void PrintResult(F f) { std::cout << f() << std::endl; }
std::string GetMessage();
Какой bat-скрипт для их удобной компиляции лучше написать?
Из инструкции к ним для оконного плохо понятно, (в отличие от Borland freecommandline tools 5.5.1, -w для оконных ) ? Как подключать пути к библиотекам в bat-файле ? Плохо видит имеющийся windows.h .

Добавлено через 2 минуты
bcc32c.cfg содержит
Код
-isystem @\..\include\dinkumware64
-isystem @\..\include\windows\crtl
-isystem @\..\include\windows\sdk
-L@\..\lib\win32c\debug
-L@\..\lib\win32c\release
-L@\..\lib\win32c\release\psdk
-Xdriver -Qunused-arguments
Добавлено через 10 минут
Мои варианты для старого компилятора 5.5.1
make_console.bat
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
rem Файл make_console.bat
rem компиляция и компоновка консольных приложений
rem в Borland Builder C++ 5.5
rem объявление переменных
path C:\Borland\BCC55\bin;%path%
set include=C:\Borland\BCC55\include
set lib=C:\Borland\BCC55\lib
rem имя исходного файла (подразумевается расширение .cpp)
set app=deconv1
rem удаляем прежние результаты компиляции
if exist %app%.exe del %app%.exe
if exist %app%.obj del %app%.obj
rem запуск компилятора
bcc32.exe -I%include% -L%lib% %app%.cpp > errout.txt
if exist %app%.obj del %app%.obj
if exist %app%.tds del %app%.tds
pause  0
%app%.exe
pause 0
make_consoledlltest.bat
Windows Batch file
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
rem Файл make_console.bat
rem компиляция и компоновка консольных приложений
rem в Borland Builder C++ 5.5
rem объявление переменных
path C:\Borland\BCC55\bin;%path%
set include=C:\Borland\BCC55\include
set lib=C:\Borland\BCC55\lib
set mylib=myfun
rem имя исходного файла (подразумевается расширение .cpp)
set app=mytestdllapp
rem удаляем прежние результаты компиляции
if exist %app%.exe del %app%.exe
if exist %app%.obj del %app%.obj
rem запуск компилятора
tdump -ee -m %mylib%.dll > %mylib%.lst
implib -a %mylib%.lib %mylib%.dll
impdef %mylib%.def %mylib%.dll
tlib %mylib%.lib, %mylib%.lst
 
bcc32.exe -I%include% -L%lib%  %mylib%.lib  %app%.cpp   > errout.txt
 
if exist %app%.obj del %app%.obj
if exist %app%.res del %app%.res
if exist %app%.tds del %app%.tds
if exist %mylib%.lib del %mylib%.lib
if exist %mylib%.def del %mylib%.def
if exist %mylib%.lst del %mylib%.lst
if exist %mylib%.obj del %mylib%.obj
if exist %mylib%.tds del %mylib%.tds
pause  0
 
%app%.exe  
 
pause 0
makedll.bat
Windows Batch file
1
2
3
4
5
6
7
8
9
path C:\Borland\BCC55\bin;%path%
set include=C:\Borland\BCC55\include
set lib=C:\Borland\BCC55\lib
set app=myfun
rem запуск компилятора
rem bcc32 -tWD -e"%app%.dll" %app%.cpp
bcc32 -tWD -I%include% -L%lib% -e"%app%.dll" %app%.cpp
 
pause 0
make_gui.bat
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
rem Файл make_gui.bat
rem компиляция и компоновка GUI-приложений
rem в Borland Builder C++ 5.5
rem объявление переменных
path C:\Borland\BCC55\bin;%path%
set include=C:\Borland\BCC55\include
set lib=C:\Borland\BCC55\lib
rem имя исходного файла (подразумевается расширение .cpp)
set app=sinwave
rem удаляем прежние результаты компиляции
if exist %app%.exe del %app%.exe
if exist %app%.obj del %app%.obj
if exist %app%.res del %app%.res
rem запуск компилятора ресурсов (подразумевается, что
rem файл ресурсов имеет то же имя,
rem что и файл с исходным кодом
if not exist %app%.rc goto compile
brc32.exe -r %app%.rc > errres.txt
:compile
rem запуск компилятора
bcc32.exe -tW -I%include% -L%lib% %app%.cpp > errout.txt
if exist %app%.obj del %app%.obj
if exist %app%.res del %app%.res
if exist %app%.tds del %app%.tds
sinwave.cpp
C++
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
/*
rem Файл make_gui.bat
rem компиляция и компоновка GUI-приложений
rem в Borland Builder C++ 5.5
rem объявление переменных
path C:\Borland\BCC55\bin;%path%
set include=C:\Borland\BCC55\include
set lib=C:\Borland\BCC55\lib
rem имя исходного файла (подразумевается расширение .cpp)
set app=sinwave
rem удаляем прежние результаты компиляции
if exist %appp%.exe del %app%.exe
if exist %appp%.obj del %app%.obj
if exist %appp%.res del %app%.res
rem запуск компилятора ресурсов (подразумевается, что
rem файл ресурсов имеет то же имя,
rem что и файл с исходным кодом
if not exist %app%.rc goto compile
brc32.exe -r %app%.rc > errres.txt
:compile
rem запуск компилятора
bcc32.exe -tW -I%include% -L%lib% %app%.cpp > errout.txt
 
*/
 
 
 
 
 
 
 
/*-----------------------------------------
   SINEWAVE.C -- Sine Wave Using Polyline
                 (c) Charles Petzold, 1998
  -----------------------------------------*/
 
#include <windows.h>
#include <math.h>
 
#define NUM    1000
#define TWOPI  (2 * 3.14159)
 
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
 
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{
     static TCHAR szAppName[] = TEXT ("SineWave") ;
     HWND         hwnd ;
     MSG          msg ;
     WNDCLASS     wndclass ;
     
     wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
     wndclass.lpfnWndProc   = WndProc ;
     wndclass.cbClsExtra    = 0 ;
     wndclass.cbWndExtra    = 0 ;
     wndclass.hInstance     = hInstance ;
     wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;
     wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
     wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
     wndclass.lpszMenuName  = NULL ;
     wndclass.lpszClassName = szAppName ;
          
     if (!RegisterClass (&wndclass))
     {
          MessageBox (NULL, TEXT ("Program requires Windows NT!"), 
                      szAppName, MB_ICONERROR) ;
          return 0 ;
     }
     
     hwnd = CreateWindow (szAppName, TEXT ("Sine Wave Using Polyline"),
                          WS_OVERLAPPEDWINDOW,
                          CW_USEDEFAULT, CW_USEDEFAULT,
                          CW_USEDEFAULT, CW_USEDEFAULT,
                          NULL, NULL, hInstance, NULL) ;
 
     ShowWindow (hwnd, iCmdShow) ;
     UpdateWindow (hwnd) ;
     
     while (GetMessage (&msg, NULL, 0, 0))
     {
          TranslateMessage (&msg) ;
          DispatchMessage (&msg) ;
     }
     return msg.wParam ;
}
 
 
 
 
 
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
     static int  cxClient, cyClient ;
     HDC         hdc ;
     int         i ,j;
     PAINTSTRUCT ps ;
     POINT       apoint [NUM] ;
static COLORREF redColor=RGB(255,0,0);
static COLORREF blueColor=RGB(0,0,255);
static COLORREF greenColor=RGB(0,255,0);
     
     
     
     switch (message)
     {
     case WM_SIZE:
          cxClient = LOWORD (lParam) ;
          cyClient = HIWORD (lParam) ;
          return 0 ;
          
     case WM_PAINT:
          hdc = BeginPaint (hwnd, &ps) ;
          
          MoveToEx (hdc, 0,        cyClient / 2, NULL) ;
          LineTo   (hdc, cxClient, cyClient / 2) ;
          
          for (i = 0 ; i < NUM ; i++)
          {
               apoint[i].x = i * cxClient / NUM ;
               apoint[i].y = (int) (cyClient / 2 * (1 - sin (TWOPI * i / NUM))) ;
          }
 Polyline (hdc, apoint, NUM) ;
 
          for (i=0;i<NUM/10;i++) {
          for ( j=0;j<NUM/10;j++) {        
          SetPixel(hdc,i*10,j*10,blueColor);
            } }
          
          return 0 ;
          
     case WM_DESTROY:
          PostQuitMessage (0) ;
          return 0 ;
     }
     return DefWindowProc (hwnd, message, wParam, lParam) ;
}
Добавлено через 10 минут
Код
C:\BCC102\bin>cmd.exe
Microsoft Windows [Version 6.1.7601]
(c) Корпорация Майкрософт (Microsoft Corp.), 2009. Все права защищены.

C:\BCC102\bin>bcc32c -h
Embarcadero C++ 7.30 for Win32 Copyright (c) 2012-2017 Embarcadero Technologies,
 Inc.
Available options (* = default setting, xxx = has sub-options: use -h -X):
(Note: -X- or -w-XXX will usually undo whatever was set or unset by -X or -wXXX.

 If two options conflict, the last one specified will be used.)
--sysroot (Note: -X- or -w-XXX will usually undo whatever was set or unset by -X
 or -wXXX.

--sysinc  Set the system include file search path
          (if specified, sysroot will be prepended)
--syslib  Set the system library file search path
          (if specified, sysroot will be prepended)
--savemem Set maximum SAVEMEM memory (in Mb)
          (This is the contiguous memory allocated to store global symbols and
           similar constructs.  Pre-compiled headers use this memory)
--version Show compiler version
--replacehdr Replace header name (e.g. --replaceHeader=a.h=b.h)
--xrtti   Generate extended rtti information
  -3      Generate 80386 protected-mode compatible instructions
  -4      Generate 80386/80486 protected-mode compatible instructions
  -5      Generate Pentium instructions
  -6      Generate Pentium Pro instructions
  -Axxx   Enable ANSI conformance
  -B      Compile to .ASM (-S), then assemble to .OBJ
  -Cxxx   Enable nested comments
  -D      -D<name> defines 'name' as a null string, or use -D<name>=<value>
  -E      Specify which assembler to use
  -G      Optimize for size/speed; use -O1 and -O2 instead
  -Hxxx   Generate and use precompiled headers
  -I      Set the include file search path
  -Jxxx   Template generation options
  -K      Set default character type to unsigned
  -L      Library file search path
  -M      Create a linker map file
  -N      Hodgepodge of miscellanity (see -h -N)
  -Nd     Macros get a value of "1" by default (-DX => -DX=1)
  -Nt     GNU __typeof(var) support
  -Nv     Allow void& as a valid type
  -O      Optimize jumps
  -P      Perform C++ compile regardless of source extension
  -Q      Extended compiler error information
  -Rxxx   Include browser information in generated .OBJ files
  -S      Compile to assembly
  -T      Specify assembler option, e.g. -Tx
  -U      Undefine any previous definitions of name
  -Vxxx   Compatibility options
  -W      Target is a Windows application
  -X      Disable compiler autodependency output
  -Y
  -Zd     Output global defs as DocBook specs; to specify: -Zd=<file>.c
  -Zn     Disable and/or don't define CodeGear builtins
  -Zx     Output global definitions to XML file.
              Sub Options:
                -Zx=<filename> Emit only types/declarations in <filename>
                -Zxf[=filename] Skip base type members
                -Zxm[=filename] Emit macros
                -Zxp[=filename] Emit file & line position
  -axxx   Set data alignment boundary.  Default is -a8; -a- means -a1
  -b      Enable -bi and treat enums as ints from a typechecking point of view
* -bi     Make sizeof(enum x) == sizeof(int) unless explicitly stated otherwise
  -c      Compile to object file only, do not link
  -d      Merge duplicate strings
  -dc     Put strings into the read-only data segment
  -dw     Put strings into the (writeable) data segment
  -e      Specify target executable pathname
  -ff     Fast floating point
  -fp     Correct Pentium FDIV flaw
  -fq     Use quiet floating point compare instruction (FUCOMP)
  -g      Stop batch compilation after n warnings (Default = 255)
  -h      Request help ('-h -' shows all help).  Can be specific: -h -V
  -i      Set maximum significant identifier length (Default = 250)
  -j      Stop batch compilation after n errors (Default = 50)
  -k      Generate standard stack frames
  -l      Pass options to the linker; example: -ls -l-x
  -m      Generate makefile dependency information
  -md     Put dependency info in .d files, not in the object file
  -mm     Ignore system header files while generating dependency info
  -mo     Specify the output file for dependency info
  -n      Set output directory for object files
  -o      Set output filename (-o<filename> or -o <filename> supported)
  -pxxx   Use Pascal calling convention
  -q      Suppress compiler identification banner
  -r      Use register variables
  -rd     Use register variables only when register keyword is employed
  -s      Link using the system's non-incremental linker
  -t      Specify target executable
  -u      Generate underscores on symbol names
  -vxxx   Turn on source debugging
  -w      Display all warnings
  -w!     Return non-zero from compiler on warnings
  -xxxx   Enable exception handling
  -y      Debug line numbers on
  -z      Options for redefining standard segment names
Use '-h <OPT>' for help on a specific option, or
    '-h -' to see all available options.

C:\BCC102\bin>bcc32x -tW sinwave.cpp
Embarcadero C++ 7.30 for Win32 Copyright (c) 2012-2017 Embarcadero Technologies,
 Inc.
sinwave.cpp:
Turbo Incremental Link 6.90 Copyright (c) 1997-2017 Embarcadero Technologies, In
c.

C:\BCC102\bin>
удалось скомпилировать sinwave.cpp и построить график

Добавлено через 18 минут
creategui.bat
Windows Batch file
1
2
3
4
5
6
7
8
9
10
 rem  -Lc:\bcc102\lib;c:\bcc102\lib\psdk
set PATH="C:\BCC102\bin"
rem bcc32x -h
rem pause 0
 bcc32x -tW winapi.cpp
  pause 0
 
 
 
pause 0
createconsole.bat
Windows Batch file
1
2
3
4
5
6
7
8
9
set PATH="C:\BCC102\bin"
 
rem bcc32x -Lc:\bcc102\lib   ccp_test.cpp
bcc32x     ccp_test.cpp
  pause 0
 
 
 
pause 0
ccp_test.cpp
C++
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
#include <iostream> //iostream.h  for old Borland compiler
#include <windows.h>
#include <locale.h>
using namespace std;
class ConsoleCP
{
    int oldin;
    int oldout;
 
public:
    ConsoleCP(int cp)
    {
        oldin = GetConsoleCP();
        oldout = GetConsoleOutputCP();
        SetConsoleCP(cp);
        SetConsoleOutputCP(cp);
    }
 
    // поскольку мы изменили свойства внешнего объекта — консоли, нам нужно
    // вернуть всё как было (если программа вылетит, пользователю не повезло)
    ~ConsoleCP()
    {
        SetConsoleCP(oldin); 
        SetConsoleOutputCP(oldout);
    }
};
 
// и в программе:    
int main(int argc, char* argv[])
{
   char key;
    ConsoleCP cp(1251);
    std::cout << "русский текст" <<  std::endl;
 cin>>key;
    return 0;
}
//set Lucida console font in the property of the console of cmd.exe window
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.08.2018, 22:26
Ответы с готовыми решениями:

Русификация консольных приложений
Народ, помогите плиз. Есть ли прога, позволяющая русифицировать консольные приложения на с++?...

Компиляция консольных приложений VC 6.0
Может быть я совсем дурак, но программировать ни разу не пробовал и даже не знаю с чего начать. Вот...

Разработка консольных приложений
Как в консольном приложении обеспечить вывод текста в кодировке 866 (MS-DOS) при наборе его в...

Нужен отладчик консольных приложений
Пишу в PascalABC. Подключён CRT. Объясните, как пользоваться отладчиком в PascalABC или посоветуйте...

__________________
Помогаю в написании студенческих работ здесь.
Записывайтесь на профессиональные курсы C++ разработчиков
5
218 / 15 / 0
Регистрация: 15.08.2016
Сообщений: 28
29.12.2019, 16:37 2
Хочу добавить важное замечание к этой версии 10.2 (bcc32c.exe C++ 7.30)

Речь про бесплатный дистрибутив отсюда:
https://www.embarcadero.com/ru... /thank-you, ФАЙЛ BCC102.zip

последовательность действий:

пусть есть пример консольного MAIN.C
C
1
2
3
4
5
6
7
8
#include <windows.h>
#include <stdio.h>
 
int main (void)
{
   printf ("OK\n");
   return 0;
}
который находится там же, где и BIN, INCLUDE, LIB
и это есть текущий каталог и там мы хотим получить .exe файл, а лог компиляции в файл -result-

если попытаться скомпилировать это таким образом:
Код
BIN\bcc32c.exe main.c >-result- 2>&1
или
Код
.\BIN\bcc32c.exe main.c >-result- 2>&1
или
Код
<полный путь>\BIN\bcc32c.exe main.c >-result- 2>&1
то это всегда приводит к тупой непонятной ошибке:

Embarcadero CLANG 7.30 Copyright (c) 2012-2017 Embarcadero Technologies, Inc.
main.c:
BCC32C.EXE: error: unable to execute command: program not executable
BCC32C.EXE: error: linker command failed with exit code 1 (use -v to see invocation)


Поиск в инете дал только это
https://github.com/emscripten-... ssues/2203
где есть упоминание про link.exe почему то из Visual Studio (хотя такое имя действительно есть внутри bcc32c.exe).

Если запустить FILEMON Марка Руссиновича, то он покажет, что идет поиск файлов с именами i686-pc-win32-ilink64.exe и ilink64.exe сначала в \SYSTEM32, потом у себя в \BIN и потом по всем каталогам в %PATH% что очень странно (почему именно эти файлы ищет?).

опция -tC не помогает
замена bcc32c.exe на bcc32x.exe не помогает

если сделать вызов из .bat и предварительно выполнить это:
Код
set CC_PRINT_OPTIONS=1
то в лог попадет больше опций, но толку мало

за решение спасибо USERPC01, и ведь не догадаться, что там так через Ж. сделано:

суть: перед именем bcc32c.exe не должно быть никакого пути!
не работает, даже если указать полный путь к bcc32c.exe

Вот MAKE.BAT:
Код
rem это работает
set PATH=.\BIN;%PATH%

rem это тоже работает (E:\TEST\102 - это где наш main.c и BIN, INCLUDE, LIB)
rem set PATH=E:\TEST\102\BIN;%PATH%

rem здесь перед именем bcc32c.exe не должно быть никакого пути!
bcc32c.exe main.c >-result- 2>&1
Надеюсь, что кому то поможет.
0
3 / 3 / 0
Регистрация: 29.06.2018
Сообщений: 1,137
01.01.2020, 15:31  [ТС] 3
При компиляции выдает файл -result- (неправильные опции)
C++
1
2
"bcc32c.exe" ­Ґ пў«пҐвбп ў­гв७­Ґ© Ё«Ё ў­Ґи­Ґ©
Є®¬ ­¤®©, ЁбЇ®«­пҐ¬®© Їа®Ја ¬¬®© Ё«Ё Ї ЄҐв­л¬ д ©«®¬.
Шрифт Terminal
"bcc32c.exe"не является внутренней или внешней командой, исполняемой программой или пакетным файлом
Может,так
Bash
1
2
3
 Set PATH=C:\Borland\BCC102\bin; %PATH%
rem здесь перед именем bcc32c.exe не должно быть никакого пути!
bcc32c.exe main.c >result.txt 2>&1
Зачем 2>&1 ?

Добавлено через 3 минуты
А с линкером и .rc-файлами , чтобы иконку или меню приложения в проводнике для виндовсных приложений ,например , вшить ?
0
Заблокирован
01.01.2020, 16:06 4
Ужас, что вы делаете.

Makefile
Bash
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
# make -B       Will build App.exe
# make -B -DDEBUG   Will build the debug version
 
.autodepend
 
#------------------------------------------------------[ Borland C - Directory
BASE = C:\bc5
 
#------------------------------------------------------[ Make WinMain ()
#LINKOPT = /Tpe /aa /c
 
#------------------------------------------------------[ Make Console main ()
LINKOPT = /Tpe /ap /c
 
#------------------------------------------------------[ Output (application name)
NAME    = test_con
MAIN    = main
OBJS    = $(MAIN).obj
 
#-------------------------------------------------------------------------- Options
CCOPT   = -w+
##CCOPT= -w+ -DSTRICT
 
ASMOPT  = /kh100000 /ml /m2
 
!if $d(DEBUG)
    CCDBG=/v
    TASMDEBUG=/zi
    LINKDEBUG=/v
!else
    CCDBG=
    TASMDEBUG=
    LINKDEBUG=
!endif
 
#-------------------------------------------------------------------------- Macros
LIBRARY = $(BASE)\Lib
INCLUDE = -I$(BASE)\Include
OPT_LIB = -L$(LIBRARY)
BCC32   = Bcc32
ILINK32 = Ilink32
TLINK32 = TLink32
BRC32   = Brc32
 
#-------------------------------------------------------------------------- Dependency List
All = $(NAME).exe
 
$(NAME) : $(All)
    @echo.
    @echo.
    @echo.  ................[ MakeNode $(NAME).exe ]....................
    @echo.
    @echo.
 
#-------------------------------------------------------------------------- Executable target
$(NAME).exe : $(OBJS)
    $(ILINK32) $(LINKDEBUG) $(LINKOPT) @&&|
$(LIBRARY)\c0x32.obj+
##$(LIBRARY)\c0w32.obj+ ### При сборке WinMain
$(MAIN).obj
$(NAME).exe
 
#-------------------------------------------------------------------------[ Library static: "cw32.lib", Dynamic: "cw32i.lib"
$(LIBRARY)\cw32.lib+
$(LIBRARY)\import32.lib
|
 
#-------------------------------------------------------------------------- CPP module
$(MAIN).obj: $(MAIN).cpp
    $(BCC32) $(CCOPT) $(CCDBG) -c -tW -a4 $**
zMake.bat

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@echo off
 
SET TOOLS=c:\tools
 
IF EXIST %TOOLS%\BC5\bin\bcc32.exe (
goto BEGIN
 
) ELSE (
@echo.
@echo.  Missing %TOOLS%\BC5\bin\bcc32.exe
@echo.
pause
goto EXIT
)
 
:BEGIN
SET Path=%TOOLS%\BC5\bin;%TOOLS%\tasm\bin;
 
make -B
pause
call kill
 
:EXIT
exit

Цитата Сообщение от USERPC01 Посмотреть сообщение
А с линкером и .rc-файлами , чтобы иконку или меню приложения в проводнике для виндовсных приложений ,например , вшить ?
Вот "Makefile" с "*.RC"
Bash
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
# make -B       Will build App.exe
# make -B -DDEBUG   Will build the debug version
 
.autodepend
 
#-----------------------------[ Borland C - Directory
BASE = C:\bc5
 
#------------------------------------------------------[ Make WinMain ()
LINKOPT = /Tpe /aa /c
 
#------------------------------------------------------[ Make Console main ()
#LINKOPT = /Tpe /ap /c
 
#-----------------------------[ Output (application name)
NAME    = test_win
MAIN    = WinMain
 
OBJS    = $(MAIN).obj
 
#-------------------------------------------------------------------------- Options
CCOPT   = -w+
ASMOPT  = /kh100000 /ml /m2
 
!if $d(DEBUG)
    CCDBG=/v
    TASMDEBUG=/zi
    LINKDEBUG=/v
!else
    CCDBG=
    TASMDEBUG=
    LINKDEBUG=
!endif
 
#-------------------------------------------------------------------------- Macros
LIBRARY = $(BASE)\Lib
INCLUDE = -I$(BASE)\Include
OPT_LIB = -L$(LIBRARY)
BCC32   = Bcc32 
ILINK32 = Ilink32
TLINK32 = TLink32
BRC32   = Brc32
 
#-------------------------------------------------------------------------- Dependency List
All = $(NAME).exe
 
$(NAME) : $(All)
    @echo.
    @echo.
    @echo.  ................[ MakeNode $(NAME).exe ]....................
    @echo.
    @echo.
 
#-------------------------------------------------------------------------- Executable target
$(NAME).exe : $(OBJS) $(RES)
    $(ILINK32) $(LINKDEBUG) $(LINKOPT) @&&|
$(LIBRARY)\c0w32.obj+
$(MAIN).obj
$(NAME).exe
 
#-----------------------------------------------[ Library static: "cw32.lib", Dynamic: "cw32i.lib"
$(LIBRARY)\cw32.lib+
$(LIBRARY)\import32.lib
|
 
#-------------------------------------------------------------------------- CPP module
$(MAIN).obj: $(MAIN).cpp
    $(BCC32) $(CCOPT) $(CCDBG) -c -tW -a4 $**
1
Заблокирован
01.01.2020, 16:15 5
Шаблон приложения, точка входа "WinMain", мультибайтовая кодировка
* отредактировать: Makefile и zMake.bat
1
Вложения
Тип файла: zip WinMain_Mbcs.zip (31.5 Кб, 1 просмотров)
218 / 15 / 0
Регистрация: 15.08.2016
Сообщений: 28
02.01.2020, 11:54 6
Цитата Сообщение от USERPC01 Посмотреть сообщение
Зачем 2>&1 ?
Есть стандартный поток вывода (stdout) и есть стандартный поток ошибок (stderr). Раньше компиляторы от Borland выводили все сообщения в stdout и достаточно было перенаправить его в файл командой >result.txt. В этой версии обычные сообщения идут в stdout, а ошибки в stderr. Если мы хотим ВСЕ сообщения (обычные и об ошибках) вывести в файл, то надо перенаправить ОБА потока (stdout и stderr) в файл. Как? Командой '>result.txt' мы перенаправляем stdout (это поток с условным номером 1) в файл result.txt, а потом командой '2>&1' мы перенаправляем stderr (это поток с условным номером 2) в поток с условным номером 1 (а это stdout уже перенаправленный в файл result.txt). Как итог: оба потока перенаправлены в файл. Порядок перенаправлений нужно оставить именно такой!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.01.2020, 11:54

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Завершение консольных приложений и другое
Всем привет. Я совсем нуб в джаве, так что сильно не ругайте. Я начал свой небольшой проэктик и...

Какой прок от консольных приложений?
Обьясните мне не сведующему для чего вообще эти консольные приложения? тупо потестить самому самому...

Объединение двух консольных приложений
Доброго времени суток. Имеется проект(не мой) с двумя консольными приложениями, собственно мне...

Идеи для консольных приложений
И снова здравствуйте! Я хотел закрепить прошедшее и сделать пару программ (калькулятор уже сделал),...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.