【问题标题】:How to print messages after make done with cmake?使用cmake完成后如何打印消息?
【发布时间】:2014-08-11 09:33:53
【问题描述】:

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

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

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

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

有什么想法吗?

提前感谢您的想法。

【问题讨论】:

  • 您希望在完成所有目标后打印此消息...所以此自定义目标依赖于所有其他目标...add_dependencies() 是个好主意吗?
  • 是的!你说的很对!但是,该项目包含许多目标。有什么办法可以得到所有目标的列表吗?

标签: post build makefile cmake message


【解决方案1】:

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

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

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

【讨论】:

  • 感谢回复。我刚才试过了,结果失败了。 ${ALL_TARGETS} 只是空的。我正在使用 CMake 2.8.11.2。是在3.0以上的CMake中实现的吗?
  • 谢谢。我之前用Set(ALL_TARGETS ${ALL_TARGETS} "${LIBRARY_NAME}" PARENT_SCOPE) 尝试过。但add_subdirectory() 方法加载的子目录中定义的某些目标在该列表中不存在。
【解决方案2】:

在构建特定目标后打印一条消息,例如。 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

(您在 cmets 中指定,您希望在所有目标之后打印一条消息,但最初的问题不太精确。所以它可能对看这里的人有些价值。)

【讨论】:

    【解决方案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. 多田!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-13
      相关资源
      最近更新 更多