cmake post_build命令陷入问题。每当我尝试构建我的CMAKE项目(LIBFDSequencer(时,我都会使用伪随机错误代码(123和9009之间的任何内容(出错。我已经将问题的根范围缩小为Cmake显然生成围绕AA 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 project属性中的post_build命令字段中编辑的(
>"echo Hello World"
or
echo Hello World
当我删除额外的代码时,它可以正常工作。我想知道是否有任何方法可以从CMAKE禁用此代码生成,或者是否有一个文件包含此生成的代码,我可以以某种方式覆盖这些代码?有人知道为什么会生成这(除了不必要的错误处理(?
请参阅add_custom_command()
函数的CMAKE文档。您正在使用不应该有的引号。应该是:
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
)