我正在尝试使用CMake完成构建过程后打印消息。
我只想在make
命令完成后通知用户,没有任何错误。
我该怎么办?我试过了add_custom_target()
,但我无法选择何时运行。
另外,我尝试了add_custom_command()
,但它没有给我正确的结果。
有什么想法吗?
提前感谢您的想法。
答案 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_BUILD
或PRE_LINK
用于其他目的,请参阅documentation。
(您在评论中指出,您希望在所有目标之后打印消息,但原始问题不太精确。因此,对于在此处查找的人来说,它可能具有一定的价值。) < / p>
答案 2 :(得分:3)
我刚刚在smarquis的帮助下解决了这个问题。 谢谢。
这是一步一步的程序。由于我的源代码树使用add_subdirectory()
方法进行了复杂的连接,因此可以将此方法应用于所有人。
初始化缓存的ALL_TARGETS
变量。在版本检查命令正下方的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 "
)
多田!