对于汇编程序中的小块代码,对我来说非常舒服 在批处理文件中直接编译或在远程Windows机器中编译。
这是我的工作.bat文件,旨在使用MASM32
;@goto end
.486
.model flat,stdcall
option casemap:none
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
.data
msg db "Hello Word",0
.code
start:
push 0
push offset msg
push offset msg
push 0
call MessageBox
push 0
call ExitProcess
end start
:end
@echo off
set name=%~n0
set cmpname=ml.exe
set linkname=link.exe
for %%X in (%cmpname%) do (set CMPL=%%~$PATH:X)
if defined CMPL (
for %%I in (%linkname%) do (set MLINK=%%~$PATH:I)
if defined MLINK (
%CMPL% /nologo /c /coff /Cp %name%.bat
%MLINK% /SUBSYSTEM:WINDOWS /FIXED:NO %name%.obj
del *.obj
) ELSE (
ECHO Cannot find %linkname% !
)
) ELSE (
ECHO Cannot find %cmpname% !
)
exit /b %ERRORLEVEL%
我的问题:
例如,在尝试使用GCC时
;@goto end
#include <stdio.h>
int main()
{
return 0;
}
:end
;@echo off
set name=%~n0
set cmpname=gcc.exe
for %%I in (%cmpname%) do (set CMPL=%%~$PATH:I)
if defined CMPL (
%CMPL% -Wall -o %name% %name%.bat
del *.obj
) ELSE (
echo Cannot find %cmpname% !
)
exit /b %ERRORLEVEL%
第一个错误:
\ CodeBlocks \ MinGW \ bin \ gcc.exe此时出乎意料。
我搜索并找到 this ,然后我改为:
for %%I in (%cmpname%) do (set CMPL="%%~$PATH:I")
解决它,但有一个新错误:
testc.bat:文件无法识别:
文件格式无法识别
collect2.exe:错误:ld返回1退出状态
我的问题是:
是否有可能以及如何使上述批处理文件与C / C ++编译器一起使用?
答案 0 :(得分:3)
如果您愿意在文件系统中添加一个与原始类型匹配的do-nothing命令,则可以使用以下内容:
int /*
;@echo off
set name=%~n0
set cmpname=gcc.exe
for %%I in (%cmpname%) do (set CMPL=%%~$PATH:I)
if defined CMPL (
%CMPL% -Wall -o %name% %name%.bat
del *.obj
) ELSE (
echo Cannot find %cmpname% !
)
exit /b %ERRORLEVEL%
*/ dummy;
#include <stdio.h>
int main()
{
return 0;
}
早期的答案没有说明多行评论: <击> 你不能。
您可以创建一个将C ++代码传递给编译器的批处理文件,但它必须生成C ++代码;你不能创建一个既有效批处理又有效的c ++文件。
基本原因是C ++没有任何停止处理文件的命令,C ++预处理器命令除了空格外不能有任何前导字符。
这意味着您可以在C ++和将#
视为注释前缀的任何语言之间创建多身份文件。 (然后,您只需在#if 0
... #endif
中包含要用其他语言处理的整个脚本。但批量不是这样的语言。
击>