Cmake版本2.8.10.2,OS centos 6.3
我们正在尝试从我们的cmake文件中的stdout上“清晰”显示文本。也就是说,文本就像我们想要的那样,没有前缀。到目前为止,我已尝试过这些变化
这是stderr(让我感到惊讶):
MESSAGE("my text")
这是stdout,但每行前缀为' - ':
MESSAGE(STATUS "my text")
这种作品,但副作用很奇怪,使我们不受欢迎:
FILE(WRITE /dev/stdout "my text")
以上是stdout,但如果cmake本身的输出被重定向到文件(cmake>文件),则会中断,尽管如果你先管道stdout(cmake | cat>文件)就可以了,但那是hacky并且意味着我们必须告诉每个人有关不会发生的变通方法。
答案 0 :(得分:6)
您可以提供以下功能:
function(CleanMessage)
execute_process(COMMAND ${CMAKE_COMMAND} -E echo "${ARGN}")
endfunction()
并像这样使用它:
CleanMessage("Clean text")
如果您想将船推出,您甚至可以扩展内置的message
选项以包含CLEAN
一个:
function(message MessageType)
if(${ARGV0} STREQUAL "CLEAN")
execute_process(COMMAND ${CMAKE_COMMAND} -E echo "${ARGN}")
else()
_message(${MessageType} "${ARGN}")
endif()
endfunction()
并像这样使用它:
message(STATUS "Incidental information")
message(CLEAN "Clean Incidental information")
message(WARNING "CMake Warning, continue processing")
在您的顶级CMakeLists.txt中定义一次是安全的。但是,如果它在例如一个可以包含多次的实用程序文件,它将导致无限递归。为避免这种情况,在定义函数的实用程序文件的开头,添加:
if(OverloadMessageIncluded)
return()
endif()
set(OverloadMessageIncluded TRUE)
这实际上是一个标题保护的CMake版本。