4

GCCFilterは、GCC の出力に色を付けることを可能にするきちんとした perl スクリプトであり、デバッグをより楽しく、より重要なことに、より高速にします。

呼び出して、CMake で生成された Makefile で GCCFilter を使用できます。

gccfilter -a -c make

ただし、このアプローチにはいくつかの欠点があります。CMake ステータス情報の出力が遅れる、CMake コマンドに色がないことが最も明白です。

質問:gccfilterコンパイラがgccであるかどうかを検索し、たとえば が設定されているかどうかを確認COLOR_CXXし (ここまではかなり簡単です)、CMake にすべての呼び出しを で置き換えるように指示するgccCMakeモジュールを作成する方法はありますかgccfilter -a -c gcc

CMake は変数CMAKE_CXX_COMPILERを提供していますが、これを変更すると、CMake は正しいインクルード パスなどを見つけることができなくなります。project()への各呼び出しの前に接頭辞を付けたコマンドの後に変更できる変数はありますgccか?

4

1 に答える 1

6

gccfilterRULE_LAUNCH_COMPILEプロパティを、必要なオプションで呼び出すラッパースクリプトにポイントすることで、CMakeを使用できgccfilterます。

gccfilter_wrap次の内容で、最も外側のCMakeプロジェクトディレクトリに名前が付けられた実行可能シェルスクリプトを作成します。

#!/bin/sh
exec gccfilter -a -c "$@"

必ずファイルの実行可能ビットを設定してください。次に、で、ターゲットを追加する前にディレクトリプロパティCMakeLists.txtを設定します。RULE_LAUNCH_COMPILE

project (HelloWorld)

set_directory_properties(PROPERTIES RULE_LAUNCH_COMPILE
   "${PROJECT_SOURCE_DIR}/gccfilter_wrap")

add_executable(HelloWorld HelloWorld.cpp)

生成されたmakefileルールは、各コンパイラ呼び出しの前にgccfilter_wrapスクリプトを付加します。または、RULE_LAUNCH_COMPILEプロパティをターゲットプロパティまたはグローバルプロパティとして設定することもできます。

このRULE_LAUNCH_COMPILEプロパティは、MakefileベースのCMakeジェネレーターでのみ機能します。


Thiloによる編集

これが私が最終的に問題を解決した方法です-基本的にこの解決策の言い換えられたバージョン:

# GCCFilter, if appliciable
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_GNUCPP)
  option(COLOR_GCC "Use GCCFilter to color compiler output messages" ON)
  set(COLOR_GCC_OPTIONS "-c -r -w" CACHE STRING "Arguments that are passed to gccfilter when output coloring is switchend on. Defaults to -c -r -w.")
  if(COLOR_GCC)
    set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${PROJECT_SOURCE_DIR}/cmake/gccfilter ${COLOR_GCC_OPTIONS}")
  endif()
endif()
于 2013-01-19T13:40:24.677 に答える