编译C代码,然后检查输出是否为空并运行它

时间:2015-12-08 17:32:43

标签: c batch-file compilation

我有这段代码:

@ECHO off
set name=code
set command1="path/to/the/file"
set command2=gcc -o %name%.exe %name%.c
start cmd.exe /c %command1% & %command2%>temp
set msg =<temp
call :CheckEmpty "temp"
goto :eof
:CheckEmpty
if %~z1 == 0 (
%name%.exe
exit
)
echo temp
pause
goto :eof

它应该做的是编译code.c,然后测试编译器的输出是否为空,以及是否运行了code.exe。如果不是,则回显错误信息。

我无法让它发挥作用。

我看着&#34; temp&#34;文件,它是空的,虽然它仍然因某种原因回显错误信息。批处理对我来说很陌生,CheckEmpty部分是从另一个stackoverflow问题中复制的。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

我在linux上,所以无法测试以下内容,

但是,这就是我写它的方式。

@ECHO off
PUSHD
set name=code

cd path/to/the/file

gcc -c -ggdb -Wall -Wextra -pedantic -std=c99 -o %name%.o   name%.c -I. 2>&1 temp
if errorlevel 1  (goto error) 

gcc -ggdb %name%.o -o %name%.exe 2>>&1 temp 
if errorlevel 1 (goto error)

%name%.exe
goto end

:error
type temp | more
pause
:end
POPD

并命名此类文件:(可能)compileit.cmd

然后通过以下方式执行:

cmd.exe /c compileit.cmd

在调用gcc时,可以使用许多其他参数。

有关详细信息,请参阅:https://gcc.gnu.org/onlinedocs/gcc/Option-Summary.html

创建批处理文件时,还有很多其他功能。

请参阅:http://ss64.com/nt/set.html了解详情

答案 1 :(得分:0)

检查%ERRORLEVEL%比编译器输出更容易。并且不要在另一个窗口中start编译器。

set name=code
set command1="path/to/the/file"
set command2=gcc -o %name%.exe %name%.c
cmd.exe /c "cd/d %command1% & %command2%"
if %ERRORLEVEL% equ 0 %command1%\%name%.exe
pause