Post 使用cmake制作完成后如何打印邮件?

Post 使用cmake制作完成后如何打印邮件?,post,build,makefile,cmake,message,Post,Build,Makefile,Cmake,Message,我正在尝试在使用CMake完成构建过程后打印消息 我只想在make命令完成后通知用户,没有任何错误 我怎么做?我尝试了添加自定义目标(),但无法选择何时运行 另外,我尝试了添加自定义命令(),但仍然没有给出正确的结果 有什么想法吗 提前感谢您的想法。您确实可以执行以下操作: add_custom_target( FinalMessage ALL ${CMAKE_COMMAND} -E cmake_echo_color --cyan "Compilation is over!" C

我正在尝试在使用CMake完成构建过程后打印消息

我只想在
make
命令完成后通知用户,没有任何错误

我怎么做?我尝试了添加自定义目标(),但无法选择何时运行

另外,我尝试了
添加自定义命令()
,但仍然没有给出正确的结果

有什么想法吗


提前感谢您的想法。

您确实可以执行以下操作:

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

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

我刚刚在的帮助下解决了该问题。 多谢各位

下面是一步一步的步骤。由于我的源代码树是通过
add\u subdirectory()
方法复杂连接的,所以这个方法可以应用于每个人

  • 初始化
    所有\u目标
    缓存的变量。在版本检查命令的正下方添加
    CMakeLists.txt
    中的行

    Set(ALL_TARGETS "" CACHE INTERNAL "")
    
  • 重写
    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()
    
  • 创建自定义目标,该目标将在构建后执行您想要执行的所有操作。在这个例子中,我只是在屏幕上打印一些信息。添加它,然后添加上面的内容

    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 "
                     )
    
  • 塔达


  • 要在构建特定目标后打印消息,请执行以下操作:。g<代码>设定目标,您可以使用

    add_custom_command(TARGET yourtarget POST_BUILD
                       COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --cyan
                       "Message after yourtarget has been built.")
    
    除了
    POST\u BUILD
    ,您还可以使用
    PRE\u BUILD
    PRE\u LINK
    进行其他用途,请参阅


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

    您希望在所有目标完成后打印此消息…因此此自定义目标取决于所有其他目标。。。添加依赖项()是否是个好主意?是的!你说得很对!但是,该项目包括许多目标。有什么办法可以让我得到所有目标的名单吗?谢谢你的回复。我刚才试过,结果失败了<代码>${ALL_TARGETS}只是空的。我正在使用CMake 2.8.11.2。它是否在CMake 3.0以上版本中实现?谢谢。我以前用
    Set(ALL\u TARGETS${ALL\u TARGETS}“${LIBRARY\u NAME}”PARENT\u SCOPE)
    尝试过这个方法。但该列表中不存在由
    add\u subdirectory()
    方法加载的子目录中定义的某些目标。