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/5/objective-c/23.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围绕add_custom_command()';s命令_Batch File_Cmake_Visual Studio 2017_Post Build Event - Fatal编程技术网

Batch file CMake围绕add_custom_command()';s命令

Batch file CMake围绕add_custom_command()';s命令,batch-file,cmake,visual-studio-2017,post-build-event,Batch File,Cmake,Visual Studio 2017,Post Build Event,使用CMake POST_BUILD命令遇到问题。每当我尝试构建我的CMake项目(libFDSequencer)时,我都会使用伪随机错误代码(123到9009之间的任何代码)出错。我已经将问题的根源缩小到一个事实上,即CMake显然会围绕aa add_custom_command()调用生成额外的批处理代码。我通过使用VisualStudio构建项目、转到项目属性并签出POST_BUILD命令发现了这一点 我运行自定义命令的CMake代码如下所示 # The first line is the

使用CMake POST_BUILD命令遇到问题。每当我尝试构建我的CMake项目(libFDSequencer)时,我都会使用伪随机错误代码(123到9009之间的任何代码)出错。我已经将问题的根源缩小到一个事实上,即CMake显然会围绕aa add_custom_command()调用生成额外的批处理代码。我通过使用VisualStudio构建项目、转到项目属性并签出POST_BUILD命令发现了这一点

我运行自定义命令的CMake代码如下所示

# The first line is the original command I want to run (which also work when  
# I just copy paste it into the POST_BUILD commands in project properties).

MESSAGE("${CMAKE_CURRENT_SOURCE_DIR}/mexTesting.cmd ${CMAKE_CURRENT_SOURCE_DIR}/src/fd/util/interfaces ${CMAKE_CURRENT_SOURCE_DIR}/mex ${CMAKE_CURRENT_SOURCE_DIR}/build/RelWithDebInfo/ ${CMAKE_CURRENT_SOURCE_DIR}/include " \"-lFDSequencer\ -lFDCommon\ -lSetupAPI\ -lwbemuuid\" " ")
add_custom_command(
    TARGET FDSequencer
    POST_BUILD
    COMMAND "echo Hello World"
)

MESSAGE("\n-----DONE------\n")
setlocal
"echo Hello World"
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
我的POST_BUILD project properties Section中包含CMake生成代码的版本如下所示

# The first line is the original command I want to run (which also work when  
# I just copy paste it into the POST_BUILD commands in project properties).

MESSAGE("${CMAKE_CURRENT_SOURCE_DIR}/mexTesting.cmd ${CMAKE_CURRENT_SOURCE_DIR}/src/fd/util/interfaces ${CMAKE_CURRENT_SOURCE_DIR}/mex ${CMAKE_CURRENT_SOURCE_DIR}/build/RelWithDebInfo/ ${CMAKE_CURRENT_SOURCE_DIR}/include " \"-lFDSequencer\ -lFDCommon\ -lSetupAPI\ -lwbemuuid\" " ")
add_custom_command(
    TARGET FDSequencer
    POST_BUILD
    COMMAND "echo Hello World"
)

MESSAGE("\n-----DONE------\n")
setlocal
"echo Hello World"
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
但是,当我像这样运行echo Hello World时(我假设它是由add_custom_command()运行的)(在VS project properties中的POST_BUILD命令字段中编辑)

当我删除额外的代码时,它工作得很好我想知道是否有任何方法可以从CMake禁用此代码生成,或者是否有一个文件包含此生成的代码,我可以以某种方式覆盖它?是否有人知道为什么会生成此命令(除了不必要的错误处理)?

有关
add\u custom\u command()
函数,请参阅。你使用的是不应该有引号的引号。应该是:

add_custom_command(
    TARGET FDSequencer
    POST_BUILD
    COMMAND echo Hello World
)
如果您尝试运行的实际命令返回了CMAKE脚本不喜欢的值,则始终可以执行以下操作:

add_custom_command(
    TARGET FDSequencer
    POST_BUILD
    COMMAND Whatever_Your_MCVE_Should_Have_Been arg1 arg2 etc & exit /b 0
)

VCEnd标签在哪里?它似乎正在将引号传递给脚本,这就破坏了它。请不要在
echo Hello World
命令周围加引号,然后进行尝试。你显然没有发布真正的代码。把密码贴出来。实际上,将代码复制并粘贴到cmd文件中,然后从控制台窗口运行它,会发生什么?我怀疑你没有深入到真正理解发生了什么的失败中去。“额外代码”不太可能是问题的根源。是否有任何命令行指令要求在没有添加代码的情况下运行该命令?我在没有引号的情况下尝试了它,它似乎工作正常,但是我想要使用的完整命令启动了一个matlab命令窗口,该窗口被那里的额外代码抑制。我不希望最终用户必须在VS中手动编辑属性POST_BUILD框。我希望不会。构建系统应该检查所有命令的返回值。错误检查究竟是如何干扰matlab调用的?隐马尔可夫模型。。。这是您在构建中弹出的交互式窗口吗?