CMake围绕add_custom_command()命令生成附加代码

时间:2018-02-22 20:28:48

标签: batch-file cmake visual-studio-2017 post-build-event

使用CMake POST_BUILD命令遇到问题。每当我尝试构建我的CMake项目(libFDSequencer)时,我都会出现伪随机错误代码(123到9009之间的任何错误)。我已经将问题的根源缩小到这样一个事实,即CMake显然会生成围绕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中禁用此代码生成,或者是否存在包含此生成代码的文件,我可以以某种方式覆盖?有谁知道为什么会产生这种情况(除了不必要的错误处理)?

1 个答案:

答案 0 :(得分:0)

有关add_custom_command()功能,请参阅CMAKE documentation。您应该使用引号,而不应该使用引号。它应该是:

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
)