我试图打印消息后,建设过程完成使用CMake。我只是想在make命令完成后通知用户,没有任何错误。我怎么做?我试过add_custom_target(),但是我不能选择什么时候运行。此外,我尝试了add_custom_command(),它再次没有给予我正确的结果。你知道吗?提前感谢你的想法。
make
add_custom_target()
add_custom_command()
am46iovg1#
实际上,您可以执行以下操作:
add_custom_target( FinalMessage ALL ${CMAKE_COMMAND} -E cmake_echo_color --cyan "Compilation is over!" COMMENT "Final Message" ) add_dependencies( FinalMessage ${ALL_TARGETS} )
该自定义目标取决于您以前定义的所有目标的列表,请确保它将最后运行。
fwzugrvs2#
要在生成一个 specific target(例如make yourtarget)后打印消息,可以使用
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。
POST_BUILD
PRE_BUILD
PRE_LINK
m4pnthwp3#
我刚刚在smarquis的帮助下解决了这个问题,谢谢。这里是一步一步的过程来做它。因为我的源树连接复杂的add_subdirectory()方法,这个方法可以适用于每个人。1.初始化缓存的ALL_TARGETS变量。在版本检查命令的右下方添加CMakeLists.txt中的行。
add_subdirectory()
ALL_TARGETS
CMakeLists.txt
Set(ALL_TARGETS "" CACHE INTERNAL "")
1.重写Add_library()和Add_executable()方法。如果有其他目标,也重写它。在CMakeLists.txt文件的末尾添加下面的行。
Add_library()
Add_executable()
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.嗒哒!
3条答案
按热度按时间am46iovg1#
实际上,您可以执行以下操作:
该自定义目标取决于您以前定义的所有目标的列表,请确保它将最后运行。
fwzugrvs2#
要在生成一个 specific target(例如
make yourtarget
)后打印消息,可以使用除了
POST_BUILD
,您也可以使用PRE_BUILD
或PRE_LINK
来做其他用途,请参阅documentation。m4pnthwp3#
我刚刚在smarquis的帮助下解决了这个问题,谢谢。
这里是一步一步的过程来做它。因为我的源树连接复杂的
add_subdirectory()
方法,这个方法可以适用于每个人。1.初始化缓存的
ALL_TARGETS
变量。在版本检查命令的右下方添加CMakeLists.txt
中的行。1.重写
Add_library()
和Add_executable()
方法。如果有其他目标,也重写它。在CMakeLists.txt
文件的末尾添加下面的行。1.创建一个自定义的目标,它将执行所有你想在构建后做的事情。在这个例子中,我只是在屏幕上打印了一些信息。添加它,然后是上面的内容。
1.嗒哒!