使用CMake,如何在“安装”过程中产生错误。并仍然运行以后的安装步骤?

时间:2017-04-18 16:49:26

标签: cmake

如何产生安装错误并仍然执行稍后的<ListView x:Name="original" Style="{StaticResource myStyle}" ... /> 步骤?

通常使用CMake,我会使用make install来创建错误并继续运行后续步骤。但是,当我使用message(SEND_ERROR "error message")指令将其插入到cmake_install.cmake中时,同一行会立即中止install(CODE ...)的执行,并且不会执行后续步骤。

在CMake 2.8.7下,我被要求更新自定义安装步骤以继续安装的其余部分。我的客户有一个MATLAB安装步骤,在某些系统上失败,并希望在开发人员决定如何继续时减轻其影响。在下面的例子中,我已经替换了#34; matlab&#34; &#34; ARGS&#34;用&#34; touch&#34; &#34;的/ dev / null的/不能/存在&#34;所以任何人都应该能够重现问题(example project)。

具体问题

我可以使用以下命令成功地将一些内容插入到写入cmake_install.cmake的make install指令中:

make install

这导致cmake_install.cmake中的以下内容:

  install(CODE "execute_process (                                                                                                                                            
        COMMAND \"touch\" \"/dev/null/cannot/exist\"                                                                                                                         
        ERROR_VARIABLE _err                                                                                                                                                  
        RESULT_VARIABLE _res                                                                                                                                                 
  )                                                                                                                                                                          
  if (NOT \${_res} EQUAL \"0\")                                                                                                                                              
    message( SEND_ERROR \"err: \${_err}, res: \${_res}\")                                                                                                                    
    message( INFO \" Proceeding with any remaining steps, but 'make install' will fail\")                                                                                    
  endif ()"
    COMPONENT mycomponentname
  )

产生的结果

IF(NOT CMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL "mycomponentname")
  execute_process (
        COMMAND "touch" "/dev/null/cannot/exist"
        ERROR_VARIABLE _err
        RESULT_VARIABLE _res
  )
  if (NOT ${_res} EQUAL "0")
    message( SEND_ERROR "err: ${_err}, res: ${_res}")
    message( INFO " Proceeding with any remaining steps, but 'make install' will fail")
  endif ()
ENDIF(NOT CMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL "mycomponentname")

注意:它立即中止,甚至不执行下一个INFO消息行。

0 个答案:

没有答案