使用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中禁用此代码生成,或者是否存在包含此生成代码的文件,我可以以某种方式覆盖?有谁知道为什么会产生这种情况(除了不必要的错误处理)?
答案 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
)