Разобрать 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?