如何在使用cmake完成make后打印消息?

zlwx9yxi  于 2022-11-24  发布在  其他
关注(0)|答案(3)|浏览(226)

我试图打印消息后,建设过程完成使用CMake。
我只是想在make命令完成后通知用户,没有任何错误。
我怎么做?我试过add_custom_target(),但是我不能选择什么时候运行。
此外,我尝试了add_custom_command(),它再次没有给予我正确的结果。
你知道吗?
提前感谢你的想法。

am46iovg

am46iovg1#

实际上,您可以执行以下操作:

add_custom_target( FinalMessage ALL
    ${CMAKE_COMMAND} -E cmake_echo_color --cyan "Compilation is over!"
    COMMENT "Final Message" )
add_dependencies( FinalMessage ${ALL_TARGETS} )

该自定义目标取决于您以前定义的所有目标的列表,请确保它将最后运行。

fwzugrvs

fwzugrvs2#

要在生成一个 specific target(例如make yourtarget)后打印消息,可以使用

add_custom_command(TARGET yourtarget POST_BUILD
                   COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --cyan
                   "Message after yourtarget has been built.")

除了POST_BUILD,您也可以使用PRE_BUILDPRE_LINK来做其他用途,请参阅documentation

  • (您在评论中指出,您希望在所有目标后打印一条消息,但原始问题不太精确。因此,它可能对查看此处的人有一定价值。)*
m4pnthwp

m4pnthwp3#

我刚刚在smarquis的帮助下解决了这个问题,谢谢。
这里是一步一步的过程来做它。因为我的源树连接复杂的add_subdirectory()方法,这个方法可以适用于每个人。
1.初始化缓存的ALL_TARGETS变量。在版本检查命令的右下方添加CMakeLists.txt中的行。

Set(ALL_TARGETS "" CACHE INTERNAL "")

1.重写Add_library()Add_executable()方法。如果有其他目标,也重写它。在CMakeLists.txt文件的末尾添加下面的行。

function(Add_library NAME)
   Set(ALL_TARGETS ${ALL_TARGETS} "${ARGN}" CACHE INTERNAL "ALL_TARGETS")
   _add_library(${NAME} ${ARGN})
 endfunction()

 function(Add_executable NAME)
   Set(ALL_TARGETS ${ALL_TARGETS} "${ARGN}" CACHE INTERNAL "ALL_TARGETS")
   _add_executable(${NAME} ${ARGN})
 endfunction()

1.创建一个自定义的目标,它将执行所有你想在构建后做的事情。在这个例子中,我只是在屏幕上打印了一些信息。添加它,然后是上面的内容。

add_custom_target(BUILD_SUCCESSFUL ALL
                   DEPENDS ${ALL_TARGETS}
                   COMMAND ${CMAKE_COMMAND} -E echo ""
                   COMMAND ${CMAKE_COMMAND} -E echo "====================="
                   COMMAND ${CMAKE_COMMAND} -E echo "  Compile complete!"
                   COMMAND ${CMAKE_COMMAND} -E echo "====================="
                   COMMAND ${CMAKE_COMMAND} -E echo ""
                  )

1.嗒哒!

相关问题