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

时间:2014-08-11 09:33:53

标签: post build makefile cmake message

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

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

我该怎么办?我试过了add_custom_target(),但我无法选择何时运行。

另外,我尝试了add_custom_command(),但它没有给我正确的结果。

有什么想法吗?

提前感谢您的想法。

3 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分:4)

在构建特定目标后打印消息,e。 G。 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

(您在评论中指出,您希望在所有目标之后打印消息,但原始问题不太精确。因此,对于在此处查找的人来说,它可能具有一定的价值。) < / p>

答案 2 :(得分:3)

我刚刚在smarquis的帮助下解决了这个问题。 谢谢。

这是一步一步的程序。由于我的源代码树使用add_subdirectory()方法进行了复杂的连接,因此可以将此方法应用于所有人。

  1. 初始化缓存的ALL_TARGETS变量。在版本检查命令正下方的CMakeLists.txt中添加一行。

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

    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 "
                     )
    
  4. 多田!