Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 如何处理CMake.exe错误_Batch File_Cmake - Fatal编程技术网

Batch file 如何处理CMake.exe错误

Batch file 如何处理CMake.exe错误,batch-file,cmake,Batch File,Cmake,我有一个批处理文件,用一些参数启动CMake.exe,如果CMake中有任何错误,我需要中断执行(这是产品构建过程的一部分)。问题是CMake.exe进程中的%ERRORLEVEL%似乎始终为0,而标准错误输出可能包含以下错误: ... -- Configuring done CMake Error at CMakeConfigs/My.cmake:77 (add_library): Cannot find source file: Resources/ActionIcons/Ac

我有一个批处理文件,用一些参数启动CMake.exe,如果CMake中有任何错误,我需要中断执行(这是产品构建过程的一部分)。问题是CMake.exe进程中的%ERRORLEVEL%似乎始终为0,而标准错误输出可能包含以下错误:

... -- Configuring done CMake Error at CMakeConfigs/My.cmake:77 (add_library): Cannot find source file: Resources/ActionIcons/ActionIcon_ABC.png Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp .hxx .in .txx Call Stack (most recent call first): My/Path/CMakeLists.txt:149 (my_add_target) -- Generating done ... ... --配置完成 CMakeConfigs/My的CMake错误。CMake:77(添加库): 找不到源文件: 参考资料/ActionIcons/ActionIcon_ABC.png 尝试扩展。C++ .cc+.cp.cxx .mm. .hh.h++。hm.hpp .hxx.in.txx 调用堆栈(最新调用优先): My/Path/CMakeLists.txt:149(我的添加目标) --生成完成 ... 我计划将标准错误输出转储到一个文件和grep/findstr error,但错误处理是否可以更优雅地完成


谢谢。

最常见的错误是在命令块中使用
%ERRORLEVEL%
,以
开始,以匹配的
结束)

在运行命令块中的任何命令之前,整个命令块由Windows命令解释器进行预处理,或者运行通常在打开
时在线使用的IFFOR命令(
。在此预处理过程中,所有
%variable%
引用将替换为引用的环境变量的当前值。然后使用预处理的代码执行命令块

通过删除批处理文件顶部的
@echo-off
,或将其修改为
@echo-on
rem@echo-off
,并在命令提示符窗口中运行批处理文件,可以看到此行为。现在,Windows命令解释器将预处理后的每个命令行和命令块作为真正的execu输出到控制台窗口接下来是特德

在命令提示窗口中运行
SET/?
时,命令SET输出的帮助说明了IFFOR示例中如何在命令行或命令块中引用环境变量,在执行时使用延迟环境在同一命令行或命令块中修改变量扩展

但在这种情况下,不需要在预处理阶段扩展
%ERRORLEVEL%
,也不需要使用
!ERRORLEVEL!
延迟扩展

从MS-DOS到目前最新的Windows 10,有一个很好的
IF ERRORLEVEL X…
语法

与几乎所有控制台应用程序一样,CMake在成功时退出,退出代码
0
,在出错时退出的次数更多

如果ERRORLEVEL X…
表示如果分配给环境变量
ERRORLEVEL
的退出代码(函数
main
的返回值)大于或等于
X
,则

那么我建议看一下:

如果
没有修改
ERRORLEVEL
的值,则成功的。没有数字的
EXIT/B
也不会修改
ERRORLEVEL

因此,在运行CMake的命令行之后的下一行中,仅需此命令行即可退出当前批处理文件的处理,并在CMake遇到任何错误时返回调用批处理文件或进程:


调用批处理文件或进程将获得作为批处理文件执行结果的CMake的退出代码,因为在这种情况下,IFexit不修改
ERRORLEVEL
。这真的很容易!

最常见的错误是在以
开头的命令块中使用
%ERRORLEVEL%
并以匹配的
结尾)

在运行命令块中的任何命令之前,整个命令块由Windows命令解释器进行预处理,或者运行通常在打开
时在线使用的IFFOR命令(
。在此预处理过程中,所有
%variable%
引用将替换为引用的环境变量的当前值。然后使用预处理的代码执行命令块

通过删除批处理文件顶部的
@echo-off
,或将其修改为
@echo-on
rem@echo-off
,并在命令提示符窗口中运行批处理文件,可以看到此行为。现在,Windows命令解释器将预处理后的每个命令行和命令块作为真正的execu输出到控制台窗口接下来是特德

在命令提示窗口中运行
SET/?
时,命令SET输出的帮助说明了IFFOR示例中如何在命令行或命令块中引用环境变量,在执行时使用延迟环境在同一命令行或命令块中修改变量扩展

但在这种情况下,不需要在预处理阶段扩展
%ERRORLEVEL%
,也不需要使用
!ERRORLEVEL!
延迟扩展

从MS-DOS到目前最新的Windows 10,有一个很好的
IF ERRORLEVEL X…
语法

与几乎所有控制台应用程序一样,CMake在成功时退出,退出代码
0
,在出错时退出的次数更多

如果ERRORLEVEL X…
表示如果分配给环境变量
ERRORLEVEL
的退出代码(函数
main
的返回值)大于或等于
X
,则

那么我建议看一下:

如果
没有修改
ERRORLEVEL
的值,则成功的。没有数字的
EXIT/B
也不会修改
ERRORLEVEL

因此,在运行CMake的命令行之后的下一行中,只需要这个命令行就可以退出当前批处理文件的处理,并返回到调用批处理文件或进程
if errorlevel 1 exit /B