Разобрать makefile для polymake

У меня есть такой файл makefile для polymake:


#  Hello world example makefile
#
#  Also shows example of exporting DOS4GOPTIONS
#
#  Built using MSVC\C++ v4.0 and MASM6.11 or Watcom 10.5 and WASM
#  Makefile scripted to use Polymake
#
#  Copyright (c) 1996 Tenberry Software, Inc.
#  All Rights Reserved

all : hellom.exe hellomcp.exe hello.exe hellocpp.exe

4GDIR=..\..
PESTUB=$(4GDIR)\bin\pestub.exe
WCSTUB=$(4GDIR)\bin\stub.exe
MSVC4Path=k:\msvc\msvc41
MASM611Path=k:\masm611
MSVC4Env :
  @%setenv PATH=$(MSVC4Path)\BIN;$(MSVC4Path)\BIN\WIN95;$(MASM611Path)\bin;
  @%setenv INCLUDE=.;$(4GDIR)\INCLUDE;$(MSVC4Path)\INCLUDE;
  @%setenv LIB=$(4GDIR)\lib;$(MASM611Path)\lib;$(MSVC4Path)\LIB;
  @%setenv MSDEVDIR=$(MSVC4Path)

Watcom105Path=k:\watcom\wc105
Watcom105Env :
  @%setenv PATH=$(Watcom105Path)\binw;$(Watcom105Path)\binnt
  @%setenv LIB=.;$(Watcom105Path)\lib386\dos;$(Watcom105Path)\lib286\dos;$(Watcom105Path)\lib386;$(Watcom105Path)\lib286;
  @%setenv INCLUDE=.;$(4GDIR)\include;$(Watcom105Path)\h;
  @%setenv WATCOM=$(Watcom105Path)

AOPTS = /coff /c
COPTS = /c /G3 /Z7 /I. /DMSVC40
LIBS = $(MSVC4Path)\LIB\LIBC.LIB $(4GDIR)\LIB\KERNEL32.LIB

.c.obj :
    @%do MSVC4Env
    :cl $(COPTS) $<

.asm.obj :
    @%do MSVC4Env
    :ml $(AOPTS) $<

############################################################################
#
# Make Microsoft PE HELLO objects and executables
#
############################################################################

hellom.exe : hellom.obj $(LIBS) hellom.def
    @%do MSVC4Env
    :link <@<
/DEBUG
/DEBUGTYPE:CV
/SUBSYSTEM:CONSOLE
/INCREMENTAL:NO
/NOD
/PDB:NONE
/OUT:$*.exe
/MAP:$*.map
/DEF:$*.def
/STUB:$(PESTUB)
$[m, *.obj, $**]
$[m, *.lib, $**]
<
    :$(4GDIR)\bin\pe2dbg $*.exe
    :$(4GDIR)\bin\w32patch -T $*.exe

hellom.obj : hello.c
    @%do MSVC4Env
    :cl $(COPTS) /Fohellom.obj $<

hellom.def: makefile
   @echo NAME  HELLOM                                    >  hellom.def
   @echo DESCRIPTION "PE hello World Example Program"    >> hellom.def
   @echo VERSION 1.0                                     >> hellom.def
   @echo CODE  PRELOAD MOVEABLE DISCARDABLE              >> hellom.def
   @echo DATA  PRELOAD SINGLE                            >> hellom.def
   @echo EXPORTS                                         >> hellom.def
   @echo       DOS4GOPTIONS                              >> hellom.def
                                                         
############################################################################
#                                                        
# Make Microsoft PE C++ HELLO objects and executables
#
############################################################################

hellomcp.exe : hellomcp.obj $(LIBS) hellomcp.def
    @%do MSVC4Env
    :link <@<
/DEBUG
/DEBUGTYPE:CV
/SUBSYSTEM:CONSOLE
/INCREMENTAL:NO
/NOD
/PDB:NONE
/OUT:$*.exe
/MAP:$*.map
/DEF:$*.def
/STUB:$(PESTUB)
$[m, *.obj, $**]
$[m, *.lib, $**]
<
   :$(4GDIR)\bin\pe2dbg $*.exe
    :$(4GDIR)\bin\w32patch -T $*.exe

hellomcp.obj : hello.c
    @%do MSVC4Env
    :cl $(COPTS) /Fohellomcp.obj $<

hellomcp.def: makefile
   @echo NAME  HELLOMCP                                     >  hellomcp.def
   @echo DESCRIPTION "PE C++ Hello World Example Program"   >> hellomcp.def
   @echo VERSION 1.0                                        >> hellomcp.def
   @echo CODE  PRELOAD MOVEABLE DISCARDABLE                 >> hellomcp.def
   @echo DATA  PRELOAD SINGLE                               >> hellomcp.def
   @echo EXPORTS                                            >> hellomcp.def
   @echo         DOS4GOPTIONS                               >> hellomcp.def


На базе этого makefile я сделал BAT файл для WinME, пользуюсь Visual Studio 4.0.



cl.exe /c /G3 /Z7 /I "C:\MSDEV\INCLUDE" /DMSVC40 /Fohello.obj hello.c

PAUSE

link.exe /DEBUG /DEBUGTYPE:CV /SUBSYSTEM:CONSOLE /INCREMENTAL:NO /NOD /PDB:NONE /OUT:hello.exe /MAP:hello.map /DEF:hello.def /STUB:pestub.exe libc.lib KERNEL32.LIB hello.obj

PAUSE

PE2DBG.EXE hello.exe

PAUSE

W32PATCH.EXE -T hello.exe

pause

Код программы hello.c компилируется и линкуется без ошибок, так же вызовы PE2DBG.EXE W32PATCH.EXE проходят без ошибок.

Рядом с результирующим фалом hello.exe лежит dos4g.exe, я запускаю hello.exe и в консоли пишет unable to load program - то есть моя попытка запустить hello.exe под расширителем dos4g.exe не дает резальтута - hello.exe не запускается.

/*
*  Standard Hello World program 
*  Copyright (c) 1996 Tenberry Software, Inc.
*  All Rights Reserved
*/

// Standard header files
#include <stdio.h>

// Test DOS4GOPTIONS string export by preventing the startup banner from 
// being displayed
char DOS4GOPTIONS[] =
    "dos4g=StartupBanner:OFF\n";
   
main(int ac, char **av)
{
    // Print the standard response to the screen
   printf("Hello, World!\n");
}

этот пример hello.cpp и makefile я взял из поставки dos4g.

Почему не запускается hello.exe? Например что значат эти строки из makefile:

$[m, *.obj, $**]
$[m, *.lib, $**]
.asm.obj :
    @%do MSVC4Env
    :ml $(AOPTS) $<

Причем тут ml и masm611 если программа на С++/C?


Ответы (0 шт):