создание makeit файла для C++ проектов

Тема в разделе "LANGS.C", создана пользователем Swat2k, 27 дек 2009.

  1. Swat2k

    Swat2k Дима

    Публикаций:
    0
    Регистрация:
    14 май 2007
    Сообщения:
    64
    Есть маленький проект , хотелось бы отказаться от всяких тяжёлых IDE (таких как в VC)) , и соберать по старинке через bat файл . Такой принцип работал для asmовских проектов идеально , а для С++ пошли какие то проблемы с cmd.exe , скорее всего я где то ошибся в bat файле , прошу наставить на путь истинный :)

    work.c
    Код (Text):
    1. // work.c
    2. #pragma comment(linker, "/nodefaultlib:libcmt")
    3. #pragma comment(lib, "msvcrt.lib")
    4.  
    5. #define _CRT_SECURE_NO_DEPRECATE
    6.  
    7. #include <windows.h>
    8. #include <stdio.h>
    9.  
    10. #define ID_DIALOG  1000
    11. #define IDB_EXIT   2000
    12. #define ID_MENU    3000
    13. #define IDM_EXIT   4000
    14. #define IDM_ABOUT  5000
    15.  
    16. // Глобальные переменные
    17. // #########################################################
    18. HMODULE hInstance;
    19. HWND    HDlg;
    20.  
    21. // Оконная процедура
    22. // #########################################################
    23. LRESULT CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
    24.  {
    25.   char cBuff[10];
    26.   int i;
    27.  
    28.   switch (message)
    29.    {
    30.     case WM_INITDIALOG:
    31.      {
    32.       HDlg=hDlg;
    33.       return TRUE;
    34.      }
    35.     case WM_COMMAND:
    36.      {
    37.       switch(LOWORD(wParam))
    38.        {
    39.         case(IDM_ABOUT):
    40.          {
    41.  
    42.           srand(GetTickCount());
    43.           i = rand();
    44.           sprintf(cBuff,"%u",i);
    45.           MessageBox(hDlg,cBuff,"Random",MB_OK);
    46.  
    47.           return TRUE;
    48.          }
    49.         case(IDM_EXIT):
    50.         case(IDB_EXIT):
    51.          {
    52.           EndDialog(hDlg,0);
    53.           return TRUE;
    54.          }
    55.        }
    56.       break;
    57.      }
    58.     case WM_CLOSE:
    59.      {
    60.       EndDialog(hDlg,0);
    61.       return TRUE;
    62.      }
    63.     break;
    64.    }
    65.   return FALSE;
    66.  }
    67.  
    68. // Точка входа
    69. // #########################################################
    70. int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
    71.  {
    72.   DialogBox(hInstance,MAKEINTRESOURCE(ID_DIALOG),0,(DLGPROC)DlgProc);
    73.   ExitProcess(0);
    74.  }
    work.bat
    Код (Text):
    1. @ECHO OFF
    2. SET BIN_PATH="C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\"
    3.  
    4. SET INC_PATH1="C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include"
    5. SET INC_PATH2="C:\Program Files\Microsoft Visual Studio 9.0\VC\include"
    6.  
    7. SET LIB_PATH1="C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib"
    8. SET LIB_PATH2="C:\Program Files\Microsoft Visual Studio 9.0\VC\lib"
    9.  
    10. SET CL_OPT=/GR- /TP /c /GS- /I%INC_PATH1% /I%INC_PATH2%
    11. SET RC_OPT=/I%INC_PATH1%
    12.  
    13. SET LINK_LIB=kernel32.lib user32.lib comctl32.lib shell32.lib comdlg32.lib gdiplus.lib shlwapi.lib
    14. SET LINK_OPT=/SUBSYSTEM:WINDOWS /LIBPATH:%LIB_PATH1% /LIBPATH:%LIB_PATH2% %LINK_LIB%
    15.  
    16. echo ###########################
    17. echo # Stage 0 - Optimize C++  #
    18. echo ###########################
    19. %BIN_PATH%cl.exe %CL_OPT% work.c
    20. echo ###########################
    21. echo # Stage 1 - Resource Link #
    22. echo ###########################
    23. %BIN_PATH%rc.exe /I%INC_PATH1% work.rc
    24. echo ###########################
    25. echo # Stage 2 - Link Main ExE #
    26. echo ###########################
    27. %BIN_PATH%link.exe %LINK_OPT% work.obj work.res
    28. del work.obj
    29. del work.res
    30. PAUSE
    work.rc
    Код (Text):
    1. // work.rc
    2. #include "windows.h"
    3.  
    4. #define ID_DIALOG  1000
    5. #define IDB_EXIT   2000
    6. #define ID_MENU    3000
    7. #define IDM_EXIT   4000
    8. #define IDM_ABOUT  5000
    9.  
    10. ID_MENU MENU DISCARDABLE
    11. BEGIN
    12.     POPUP "&File"
    13.     BEGIN
    14.         MENUITEM "E&xit",IDM_EXIT
    15.     END
    16.     POPUP "&Help"
    17.     BEGIN
    18.         MENUITEM "&About ...",IDM_ABOUT
    19.     END
    20. END
    21.  
    22. ID_DIALOG DIALOG  0, 0, 397, 231
    23. STYLE DS_CENTER | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX
    24. MENU ID_MENU
    25. CAPTION "Диалог"
    26. FONT 8, "MS Sans Serif"
    27. BEGIN
    28.   PUSHBUTTON   "Exit",IDB_EXIT,340,210,50,14
    29. END
    Вывод bat :
    Код (Text):
    1. ###########################
    2. # Stage 0 - Optimize C++  #
    3. ###########################
    4. Оптимизирующий 32-разрядный компилятор Microsoft (R) C/C++ версии 15.00.30729.01
    5.  для 80x86
    6. (C) Корпорация Майкрософт (Microsoft Corporation). Все права защищены.
    7.  
    8. work.c
    9. ###########################
    10. # Stage 1 - Resource Link #
    11. ###########################
    12. ""C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\"rc.exe" не является внутр
    13. енней или внешней
    14. командой, исполняемой программой или пакетным файлом.
    15. ###########################
    16. # Stage 2 - Link Main ExE #
    17. ###########################
    18. Microsoft (R) Incremental Linker Version 9.00.30729.01
    19. Copyright (C) Microsoft Corporation.  All rights reserved.
    20.  
    21. LINK : fatal error LNK1181: не удается открыть входной файл "work.res"
    Откуда он там ковычки берёт ? 0_0
     
  2. make

    make New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2009
    Сообщения:
    59
    Убери кавычки
     
  3. Swat2k

    Swat2k Дима

    Публикаций:
    0
    Регистрация:
    14 май 2007
    Сообщения:
    64
    нельзя , в пути содержаться пробелы , если их не заключать в кавычки то всё в разнос пойдёт
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Swat2k
    неправда. по документации set присваивает переменной _всё_ после знака "=".

    Код (Text):
    1. D:\Documents and Settings\Great.NOTEBOOK>set Var=D:\Program Files\Microsoft Visual Studio
    2.  
    3. D:\Documents and Settings\Great.NOTEBOOK>echo %Var%
    4. D:\Program Files\Microsoft Visual Studio
    5.  
    6. D:\Documents and Settings\Great.NOTEBOOK>
    убери кавычки.)
     
  5. Swat2k

    Swat2k Дима

    Публикаций:
    0
    Регистрация:
    14 май 2007
    Сообщения:
    64
    Убрал кавычки у путей
    Код (Text):
    1. ###########################
    2. # Stage 0 - Optimize C++  #
    3. ###########################
    4. "C:\Program" не является внутренней или внешней
    5. командой, исполняемой программой или пакетным файлом.
    6. ###########################
    7. # Stage 1 - Resource Link #
    8. ###########################
    9. "C:\Program" не является внутренней или внешней
    10. командой, исполняемой программой или пакетным файлом.
    11. ###########################
    12. # Stage 2 - Link Main ExE #
    13. ###########################
    14. "C:\Program" не является внутренней или внешней
    15. командой, исполняемой программой или пакетным файлом.
    Некатит (
    Заменил пути с пробелами на их аналоги .
    Код (Text):
    1. @ECHO OFF
    2. SET BIN_PATH=C:\PROGRA~1\MICROS~1.0\VC\bin\
    3.  
    4. SET INC_PATH1=C:\PROGRA~1\MIA713~1\Windows\v6.0A\Include
    5. SET INC_PATH2=C:\PROGRA~1\MICROS~1.0\VC\include
    6.  
    7. SET LIB_PATH1=C:\PROGRA~1\MIA713~1\Windows\v6.0A\Lib
    8. SET LIB_PATH2=C:\PROGRA~1\MICROS~1.0\VC\lib
    9.  
    10. SET CL_OPT=/GR- /TP /c /GS- /I%INC_PATH1% /I%INC_PATH2%
    11. SET RC_OPT=/I%INC_PATH1%
    12.  
    13. SET LINK_LIB=kernel32.lib user32.lib comctl32.lib shell32.lib comdlg32.lib gdiplus.lib shlwapi.lib
    14. SET LINK_OPT=/SUBSYSTEM:WINDOWS /LIBPATH:%LIB_PATH1% /LIBPATH:%LIB_PATH2% %LINK_LIB%
    15.  
    16. echo ###########################
    17. echo # Stage 0 - Optimize C++  #
    18. echo ###########################
    19. %BIN_PATH%cl.exe %CL_OPT% work.c
    20. echo ###########################
    21. echo # Stage 1 - Resource Link #
    22. echo ###########################
    23. %BIN_PATH%rc.exe /I%INC_PATH1% work.rc
    24. echo ###########################
    25. echo # Stage 2 - Link Main ExE #
    26. echo ###########################
    27. %BIN_PATH%link.exe %LINK_OPT% work.obj work.res
    28. del work.obj
    29. del work.res
    30. PAUSE
    Вывод :
    Код (Text):
    1. ###########################
    2. # Stage 0 - Optimize C++  #
    3. ###########################
    4. Оптимизирующий 32-разрядный компилятор Microsoft (R) C/C++ версии 15.00.30729.01
    5.  для 80x86
    6. (C) Корпорация Майкрософт (Microsoft Corporation). Все права защищены.
    7.  
    8. work.c
    9. ###########################
    10. # Stage 1 - Resource Link #
    11. ###########################
    12. "C:\PROGRA~1\MICROS~1.0\VC\bin\rc.exe" не является внутренней или внешней
    13. командой, исполняемой программой или пакетным файлом.
    14. ###########################
    15. # Stage 2 - Link Main ExE #
    16. ###########################
    17. Microsoft (R) Incremental Linker Version 9.00.30729.01
    18. Copyright (C) Microsoft Corporation.  All rights reserved.
    19.  
    20. LINK : fatal error LNK1181: не удается открыть входной файл "work.res"
     
  6. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Да не надо на аналоги заменять. Ты кавычки проставил не там, где надо. А там, где не надо, не проставил.
    Кавычки при вызове нужны. "%BIN_PATH%\cl.exe"

    Все перепутал, что можно было)
     
  7. Swat2k

    Swat2k Дима

    Публикаций:
    0
    Регистрация:
    14 май 2007
    Сообщения:
    64
    Код (Text):
    1. @ECHO OFF
    2. SET BIN_PATH=C:\Program Files\Microsoft Visual Studio 9.0\VC\bin
    3.  
    4. SET INC_PATH1=C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include
    5. SET INC_PATH2=C:\Program Files\Microsoft Visual Studio 9.0\VC\include
    6.  
    7. SET LIB_PATH1=C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib
    8. SET LIB_PATH2=C:\Program Files\Microsoft Visual Studio 9.0\VC\lib
    9.  
    10. SET CL_OPT=/GR- /TP /c /GS- /I%INC_PATH1% /I%INC_PATH2%
    11. SET RC_OPT=/I%INC_PATH1%
    12.  
    13. SET LINK_LIB=kernel32.lib user32.lib comctl32.lib shell32.lib comdlg32.lib gdiplus.lib shlwapi.lib
    14. SET LINK_OPT=/SUBSYSTEM:WINDOWS /LIBPATH:%LIB_PATH1% /LIBPATH:%LIB_PATH2% %LINK_LIB%
    15.  
    16. echo ###########################
    17. echo # Stage 0 - Optimize C++  #
    18. echo ###########################
    19. "%BIN_PATH%\cl.exe" %CL_OPT% work.c
    20. echo ###########################
    21. echo # Stage 1 - Resource Link #
    22. echo ###########################
    23. "%BIN_PATH%\rc.exe" /I%INC_PATH1% work.rc
    24. echo ###########################
    25. echo # Stage 2 - Link Main ExE #
    26. echo ###########################
    27. "%BIN_PATH%\link.exe" %LINK_OPT% work.obj work.res
    28. del work.obj
    29. del work.res
    30. PAUSE
    Так тоже не хочет ( Output
    Код (Text):
    1. ###########################
    2. # Stage 0 - Optimize C++  #
    3. ###########################
    4. Оптимизирующий 32-разрядный компилятор Microsoft (R) C/C++ версии 15.00.30729.01
    5.  для 80x86
    6. (C) Корпорация Майкрософт (Microsoft Corporation). Все права защищены.
    7.  
    8. Microsoft
    9. c1xx : fatal error C1083: Не удается открыть файл источник: Files\Microsoft: No
    10. such file or directory
    11. Include
    12. c1xx : fatal error C1083: Не удается открыть файл источник: SDKs\Windows\v6.0A\I
    13. nclude: No such file or directory
    14. Microsoft
    15. c1xx : fatal error C1083: Не удается открыть файл источник: Files\Microsoft: No
    16. such file or directory
    17. Visual
    18. c1xx : fatal error C1083: Не удается открыть файл источник: Visual: No such file
    19.  or directory
    20. Studio
    21. c1xx : fatal error C1083: Не удается открыть файл источник: Studio: No such file
    22.  or directory
    23. include
    24. c1xx : fatal error C1083: Не удается открыть файл источник: 9.0\VC\include: No s
    25. uch file or directory
    26. work.c
    27. work.c(7) : fatal error C1083: Не удается открыть файл include: windows.h: No su
    28. ch file or directory
    29. Создание кода...
    30. ###########################
    31. # Stage 1 - Resource Link #
    32. ###########################
    33. ""C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\rc.exe"" не является внутр
    34. енней или внешней
    35. командой, исполняемой программой или пакетным файлом.
    36. ###########################
    37. # Stage 2 - Link Main ExE #
    38. ###########################
    39. Microsoft (R) Incremental Linker Version 9.00.30729.01
    40. Copyright (C) Microsoft Corporation.  All rights reserved.
    41.  
    42. LINK : fatal error LNK1181: не удается открыть входной файл "Files\Microsoft.obj"
     
  8. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Слушай ну я думал ты сам догадаешься, что надо исправить _НЕ ТОЛЬКО_ там, где я указал.
    Сам подумай - для -I%INC_PATH% подставляется строка без кавычек - значит они там тоже нужны.
    А так же в опциях RC и линкера, где подключаются каталоги аналогичным образом. Мозги включать иногда полезно, нэ?