3

Cmake 版本 2.8.10.2,操作系统 centos 6.3

我们正在尝试从我们的 cmake 文件中在标准输出上获得“干净”的文本显示。也就是说,我们想要的文本,没有前缀。到目前为止,我已经尝试了这些变化

这转到 stderr (让我感到惊讶):

MESSAGE("my text")

这将转到标准输出,但在每行前面加上'--':

MESSAGE(STATUS "my text")

这种方法有效,但副作用很奇怪,对我们来说是不受欢迎的:

FILE(WRITE /dev/stdout "my text")

以上内容转到标准输出,但如果 cmake 本身的输出被重定向到文件(cmake > 文件),则中断,尽管如果您首先通过管道输出标准输出(cmake | cat > 文件)也可以,但这很hacky,意味着我们必须告诉每个人关于不会发生的解决方法。

4

1 回答 1

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 版本。

于 2013-04-05T20:34:10.207 回答