Как я могу избавиться от * .exe.manifest файлов из MSVC скомпилированных EXE-файлов?

Я прошу прощения заранее, прежде чем задавать глупые вопросы,
но я искал в Интернете в моих силах, но не нашел никакого ответа, который работает в моем случае.
Мой вопрос:
Как я могу избавиться от смущающего * .manifest.exe связано с *.EXE,
когда коды, скомпилированные с MS Visual Studio 2008 из bakefile сгенерированный make-файл?

Сначала я создал бекфайл следующим образом:

<?xml version="1.0" ?>
<!--
===========================================
Plain EXE
===========================================
-->
<makefile><!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

<!-- HERE OUR PROJECT GOES -->
<exe id="MyApplication">
<app-type> console </app-type>
<!-- Compiler Specific -->
<cflags>/TC /W4 /Za </cflags> <!-- Compile code as C. /TP , as C++
/Tc <source file> means this file is C only, /Tp means this file is C++ only.
/O1 minimize space, /O2 maximize speed, /Os favor code space, /Ot favor code speed.
/Wall enable all warnings (gives warning on own headers like stdio.h).
/Wp64 enable 64 bit porting warnings (will be deprecated in future).
/Za disable extensions, can be used with plain console apps but not with gui apps. -->

<!-- <define>SOMEMACRO</define> -->
<!-- <define>_OPENGLUT_STATIC</define> --> <!-- use underscore '_' before macro -->
<!-- <include>../include/foo</include> -->
<!-- <include>C:\xtralibs\appu</include> -->
<!-- <include>C:\xtralibs\OpenGLUT-0.6.3vc</include> -->
<!-- <headers>utils.h additionalheader.h</headers> -->

<sys-lib> user32.lib kernel32.lib shell32.lib gdi32.lib comctl32.lib ole32.lib
winmm </sys-lib> <!-- OpenGLUT_static.lib OpenGLUT.lib glu32.lib opengl32.lib -->
<!-- <sys-lib>png</sys-lib> -->
<!-- <sys-lib>OpenGLUT</sys-lib> -->
<!-- <sys-lib>z</sys-lib> -->
<!-- <lib-path>/usr/lib/mysql</lib-path> -->
<!-- <lib-path>C:\xtralibs\OpenGLUT-0.6.3vc</lib-path> -->
<!-- note that hardcoding library paths like this is a bad
idea, it's done here only for the sake of simplicity;
in real bakefile, an <option> would be used -->
<!--<library>mylib</library> -->
<ldflags> /ENTRY:"mainCRTStartup"</ldflags> <!-- required for gui apps only,
>can be used with console apps also -->

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

<!-- ~~~~~~~~ Compiler Specific definition Ends ~~~~~~~~~~ -->

<!-- COMMON -->
<!-- <win32-res> resource.rc </win32-res> -->
<sources> test.c </sources>

</exe>
<!-- HERE OUR PROJECT ENDS -->

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
</makefile>

Затем я создал командный файл как:

bakefile -f msvc -o Makefile.mak testing.bkl

вызвать «% programfiles% \ Microsoft Visual Studio 9.0 \ VC \ vcvarsall.bat»
nmake -f Makefile.mak
CMD

После этого Makefile был создан как:

# =========================================================================
#     This makefile was generated by
#     Bakefile 0.2.9 (http://www.bakefile.org)
#     Do not modify, all changes will be overwritten!
# =========================================================================# -------------------------------------------------------------------------
# These are configurable options:
# -------------------------------------------------------------------------

# C compiler
CC = cl

# Standard flags for CC
CFLAGS =

# Standard preprocessor flags (common for CC and CXX)
CPPFLAGS =

# Standard linker flags
LDFLAGS =# -------------------------------------------------------------------------
# Do not modify the rest of this file!
# -------------------------------------------------------------------------

### Variables: ###

MYAPPLICATION_CFLAGS = /MD /DWIN32 /D_CONSOLE /TC /W4 /Za $(CPPFLAGS) $(CFLAGS)
MYAPPLICATION_OBJECTS =  \
MyApplication_test.obj

### Conditionally set variables: ###### Targets: ###

all: MyApplication.exe

clean:
-if exist .\*.obj del .\*.obj
-if exist .\*.res del .\*.res
-if exist .\*.pch del .\*.pch
-if exist MyApplication.exe del MyApplication.exe
-if exist MyApplication.ilk del MyApplication.ilk
-if exist MyApplication.pdb del MyApplication.pdb

MyApplication.exe: $(MYAPPLICATION_OBJECTS)
link /NOLOGO /OUT:$@  /SUBSYSTEM:CONSOLE /ENTRY:"mainCRTStartup" $(LDFLAGS) @<<
$(MYAPPLICATION_OBJECTS)   user32.lib kernel32.lib shell32.lib gdi32.lib comctl32.lib ole32.lib
winmm.lib
<<

MyApplication_test.obj: .\test.c
$(CC) /c /nologo /TC /Fo$@ $(MYAPPLICATION_CFLAGS) .\test.c

Наконец мой код скомпилирован с Visual Studio 2008.
До этого все было хорошо.
Теперь главная проблема приходит.
Visual Studio создает файл манифеста, который на самом деле представляет собой простой XML-файл.
Когда я удаляю манифест, мой exe не запускается.

  • Можно ли создать файл-файл таким образом, чтобы скомпилированный exe-файл никогда не требовал манифеста?

    Я имею в виду некоторые флаги компилятора / компоновщика, которые я хотел бы добавить, чтобы решить эту проблему, но я не знаю этот флаг.

Я с нетерпением жду вашей помощи.

0

Решение

Я нашел способ решить это. В Bakefile уже есть xml-тег

<postlink-command></postlink-command>

где мы можем запустить mt.exe, чтобы встроить манифест и, наконец, удалить манифест.

Код C:

/* main.c */
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>

int main(void) {
printf("Hello world!\n");
system ("PAUSE");
return 0;
}

Бакфайл это (plain_exe.bkl):

<?xml version="1.0" ?>
<!--
===========================================
A SIMPLE EXE
===========================================
-->
<makefile>
<exe id="hello">
<sources> main.c </sources>
<sys-lib> user32.lib kernel32.lib shell32 </sys-lib>
<pic>on</pic>
<postlink-command> mt.exe -manifest $(id).exe.manifest -outputresource:$(id).exe;1
<postlink-command> del $(id).exe.manifest </postlink-command>
</exe>
</makefile>

Пакет (genbake.bat):

bakefile -f msvc plain_exe.bkl -o Makefile.mak
call C:\PROGRA~1\MICROS~1.0\VC\vcvarsall.bat
nmake -f Makefile.mak
cmd

Запустите пакет, чтобы построить все.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]