3

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 > file)、壊れます。最初に stdout をパイプしても問題ありません (cmake | cat > file)。起こらない回避策について全員に伝えます。

4

1 に答える 1

6

次の機能を提供できます。

function(CleanMessage)
  execute_process(COMMAND ${CMAKE_COMMAND} -E echo "${ARGN}")
endfunction()

次のように使用します。

CleanMessage("Clean text")


ボートを押し出したい場合は、組み込みmessageオプションを拡張してCLEAN1 つを含めることもできます。

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 に答える