2

遇到 CMake POST_BUILD 命令的问题。每当我尝试构建我的 CMake 项目 (libFDSequencer) 时,都会出现伪随机错误代码(介于 123 和 9009 之间的任何错误代码)。我已将问题的根源缩小到 CMake 显然会围绕 a add_custom_command() 调用生成额外的批处理代码这一事实。我通过使用 Visual Studio 构建我的项目、转到我的项目属性并检查 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")

在我的 POST_BUILD 项目属性部分中使用 CMake 生成代码的版本如下所示...

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 项目属性的 POST_BUILD 命令字段中编辑)

"echo Hello World"

or 

echo Hello World

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

4

1 回答 1

0

有关该功能,请参阅CMAKE 文档add_custom_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
)
于 2018-02-22T21:39:18.027 回答