2016-06-25 5 views
0

私はllvmプラグインを作成し、各ソースファイル上でプラグインを実行するcmakeオブジェクトライブラリを作成しましたが、コンパイル単位ごとにプラグインが再度実行されるのに対し、コンパイル全体からデータを取得する必要があります。cmake build configを使用してllvm libclangツールを実行するにはどうすればいいですか?

私のビルド環境はかなり複雑ですが、私はこのツールを実行するための設定の2番目の表現を管理したくありません。

既存のCMakeLists.txtを使用して、#defineのパスとインクルードパスを、コードベース全体で1回実行できるツールにするにはどうすればよいですか?

私は得ることができること(多分いくつかのコマンドラインツールと組み合わせて)、それは、単一のコンパイル単位になるため、プラグインにColiruのユニティ・ビルドを使用しようと考えましたが、cmakeのに組み込まれて何かを期待していました私が必要とする情報また、複数のデータファイルを構築し、それらを組み合わせるための別のツールを作成するマルチパスを実行することもできますが、理想的ではありません。

ありがとうございます。

+0

私は、これを2つの段階で行う必要があると考えています。各ファイルのデータを収集し、第2段階でそのデータを照合します。 (コンパイルとリンクの仕方と同様に、各ソースファイルをコンパイルし、すべてを1つのユニットにリンクする) –

答えて

0

私はcotireモジュール(https://github.com/sakra/cotire)を使用し、ユニティビルド機能(コンパイルするすべてのソースを1つのファイルにまとめています)を構成して実行しました。

ユニティビルドはC++と100%互換ではありませんが、ファイルレベルの境界を壊すので、私のために働きました。

それを設定することは少しトリッキーだったと私はそれを最善の方法をやったわからないんだけど、私がやったことは、私はサブディレクトリに次のように入れて、私のメインのCMakeLists.txtファイルにadd_subdirectory(my_directory_name)を入れた。

MACRO(ADD_CXX_FLAGS) 
    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${ARGN}") 
# MESSAGE(${CMAKE_CXX_FLAGS}) 
ENDMACRO(ADD_CXX_FLAGS) 


# target_compile_options is the "better" way to do this but it dedupes flags, 
# so the multiple -Xclang flags after the first one get lost. There is a cmake bug on this but no one 
# is working on it at this time 
ADD_CXX_FLAGS(-Xclang) 
ADD_CXX_FLAGS(-load) 
ADD_CXX_FLAGS(-Xclang) 
ADD_CXX_FLAGS(my_plugin.dylib) <== substitute yours here 
ADD_CXX_FLAGS(-Xclang) 
ADD_CXX_FLAGS(-plugin) 
ADD_CXX_FLAGS(-Xclang) 
ADD_CXX_FLAGS(MyPluginRegisteredName) <== substitute yours here 


# 
add_library(apb-js-api-template OBJECT ${APB_SOURCE_FILES}) 
set_target_properties(some-project-name-template PROPERTIES COTIRE_UNITY_TARGET_NAME "some-project-name") 
cotire(some-project-name-template) 
関連する問題