Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以停止CMake处理而不出错吗_Cmake - Fatal编程技术网

我可以停止CMake处理而不出错吗

我可以停止CMake处理而不出错吗,cmake,Cmake,我需要能够从CMake函数或宏中停止CMake处理。我不想只停止处理当前文件,但停止所有CMake处理。现在,我正在使用消息(致命错误“Foo”)。for消息说明它完全满足我的需要: CMake错误,停止处理和生成 但是,我希望能够做到这一点而不产生错误。我也不需要留言。我只想完全退出。有没有办法做到这一点 如果您的CMakeLists.txt层次结构相当浅,则可以调用一次或两次(取决于您是否调用了add_subdirectory(),或者您是否在宏/函数中),以返回调用文件或函数并退出CMak

我需要能够从CMake函数或宏中停止CMake处理。我不想只停止处理当前文件,但停止所有CMake处理。现在,我正在使用
消息(致命错误“Foo”)
。for
消息
说明它完全满足我的需要:

CMake错误,停止处理和生成


但是,我希望能够做到这一点而不产生错误。我也不需要留言。我只想完全退出。有没有办法做到这一点

如果您的CMakeLists.txt层次结构相当浅,则可以调用一次或两次(取决于您是否调用了
add_subdirectory()
,或者您是否在宏/函数中),以返回调用文件或函数并退出CMake处理

如果项目层次结构更复杂,并且希望从任意位置退出CMake,则没有本机CMake命令支持该操作。但是,您可以推出自己的(无可否认,有点可怕)解决方案来终止
cmake

function(exit_cmake)
  if(UNIX)
    set(KILL_COMMAND "killall")
    execute_process(COMMAND ${KILL_COMMAND} -9 cmake
      WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
    )
  else()
    set(KILL_COMMAND "taskkill")
    execute_process(COMMAND ${KILL_COMMAND} /IM cmake.exe /F
      WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
    )
  endif()
endfunction()
如果将其包含在顶级CMake文件中,则可以从CMakes中的任何位置调用该文件以静默退出


警告:这将终止所有当前运行的CMake进程,而不仅仅是您当前的进程。由于您正在强制终止进程,您的CMake文件/缓存可能会处于一种奇怪的状态。

如果您的CMakeLists.txt层次结构相当浅,您可以调用一次或两次(取决于您是否调用了
add_subdirectory()
或您是否在宏/函数中)返回调用文件或函数并退出CMake处理

如果项目层次结构更复杂,并且希望从任意位置退出CMake,则没有本机CMake命令支持该操作。但是,您可以推出自己的(无可否认,有点可怕)解决方案来终止
cmake

function(exit_cmake)
  if(UNIX)
    set(KILL_COMMAND "killall")
    execute_process(COMMAND ${KILL_COMMAND} -9 cmake
      WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
    )
  else()
    set(KILL_COMMAND "taskkill")
    execute_process(COMMAND ${KILL_COMMAND} /IM cmake.exe /F
      WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
    )
  endif()
endfunction()
如果将其包含在顶级CMake文件中,则可以从CMakes中的任何位置调用该文件以静默退出


警告:这将终止所有当前运行的CMake进程,而不仅仅是您当前的进程。由于您正在强制终止进程,您的CMake文件/缓存可能会处于一种奇怪的状态。

“从任意位置退出”是我想要的。引用的答案似乎仍在生成输出(至少是堆栈跟踪)。我要寻找的是一种完全无声的终止CMake处理的方法。你是对的,我测试了
message()
override,但它没有像我希望的那样工作。我将根据我的答案对其进行修订。@DiB我用一个似乎可以在我的机器(Windows 10)上运行的解决方案编辑了我的答案,并且应该也可以在Linux上运行。虽然这不是最好的解决方案,但你可以尝试一下,看看它是否适合你的情况。这是一种创造性的方法。我担心在可能同时运行多个CMake副本的生产环境中,这会产生意外的后果。就像你说的:“有点吓人”,“从任意位置退出”是我想要的。引用的答案似乎仍在生成输出(至少是堆栈跟踪)。我要寻找的是一种完全无声的终止CMake处理的方法。你是对的,我测试了
message()
override,但它没有像我希望的那样工作。我将根据我的答案对其进行修订。@DiB我用一个似乎可以在我的机器(Windows 10)上运行的解决方案编辑了我的答案,并且应该也可以在Linux上运行。虽然这不是最好的解决方案,但你可以尝试一下,看看它是否适合你的情况。这是一种创造性的方法。我担心在可能同时运行多个CMake副本的生产环境中,这会产生意外的后果。就像你说的:“有点吓人”。