コンパイル・データベースの生成
目次
コンパイル・データベースの生成#
コンパイル・データベースは、コマンドオプションの配列を含む JSON ファイルであり、各オブジェクトは通常、次の 3 つで構成されます。
directory
: コンパイルの作業ディレクトリー。コマンドまたはファイルフィールドで指定されるすべてのパスは、このディレクトリーに対して絶対パスまたは相対パスである必要があります。command
: コンパイルコマンド。file
: コンパイルステップで処理される翻訳単位のメインのソースファイル。
コンパイル・データベースには、それぞれの翻訳単位のメイン・ソース・ファイルの詳細なビルドオプションが含まれており、コード・プロジェクトの移行をガイドするためインテル® DPC++ 互換性ツールで使用されます。
例:
1[
2 {
3 "directory": "/path/to/project",
4 "command": "/usr/bin/clang++ ...-Iinclude_path -D_FOO_=VALUE -c ./foo/foo.cpp",
5 "file": "./foo/foo.cpp"
6 },
7 ...
8 {
9 "directory": "/path/to/project",
10 "command": "/usr/bin/clang++ ...-Iinclude_path -D_BAR_=VALUE -c ./foo/bar.cpp",
11 "file": "./foo/bar.cpp"
12 }
13]
インテル® DPC++ 互換性ツールによって提供される intercept-build
スクリプトを実行することで生成できます。intercept-build
は、次の拡張子のファイルのコンパイル・コマンドラインのキャプチャーをサポートします: .c
、.C
、.cc
、.CC
、.cp
、.cpp
、.cxx
、.c++
、.C++
、.txx
、および .cu
。
Makefile ベースのプロジェクトのコンパイル・データベースを生成#
Makefile ベースのプロジェクトのソースコードは、プロジェクト Makefile で指定されたビルドコマンドを実行することでコンパイルし、実行可能なバイナリーまたはライブラリーにリンクできます。
Makefile ベースのプロジェクトでは、intercept-build make
を実行してコンパイル・データベースを生成できます。
コンパイル・データベースの生成を表示するには、folder-options-dpct サンプルを使用します。
folder-options-dpct
サンプル・ディレクトリーに移動します。intercept-build ツールを実行して、コンパイル・データベースを生成します。
intercept-build make
コンパイル・データベース
compile_commands.json
は、サンプル・ディレクトリーに生成されます。
CMake ベースのプロジェクトのコンパイル・データベースを生成#
CMake は、CMakeLists.txt
ファイルを使用して、プロジェクトの構成、ソースファイル、および依存関係を記述します。Cmake を使用する場合、CMakeLists.txt
ファイルが依存するすべてのソフトウェアがインストールされていることを確認し、機能する Makefile を CMake で生成できるようにします。
Cmake ベースのプロジェクト向けのコンパイル・データベースを生成するには、2 つの方法があります。
intercept-build
を使用するCMake オプション
CMAKE_EXPORT_COMPILE_COMMANDS
を使用します
オプション 1: インターセプト・ビルドによりコンパイル・データベースを生成#
以下のステップは、intercept-build
を使用してコンパイル・データベースを生成する方法を示しています。
プロジェクトに必要な依存関係のあるソフトウェアをインストールします。
コマンドウィンドウを開いて、プロジェクトのフォルダーに移動します。
プロジェクト・フォルダーで新しいビルド・ディレクトリーを作成し、そこに移動します。
mkdir build && cd build
Makefile を生成するため CMake を実行します。
cmake ../
コンパイル・データベースを生成するには
intercept-build
を実行します。intercept-build make
オプション 2: CMake オプションを使用してコンパイル・データベースを生成#
CMake 3.5 バージョン以降では、CMake オプション CMAKE_EXPORT_COMPILE_COMMANDS
を使用してコンパイル・データベースを生成できます。例えば、次のコマンドでは、ビルド・ディレクトリーにコンパイル・データベース compile_commands.json
を生成します。
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ../
注
CUDA* ソースコードのサポートが強化されているため、CMake 3.10 移行を使用することを推奨します。
Setuptools ベースのプロジェクトのコンパイル・データベースを生成#
Setuptools は、Python プロジェクトのパッケージ化、配布、インストールを容易にする Python パッケージ開発ライブラリーです。ビルドシステムとして setuptools を使用するプロジェクトでコンパイル・データベースを生成する手順は次のとおりです。
Python ビルドコマンドで
-v
または--verbose
フラグを使用して、setuptools プロジェクトのビルドログを生成します。python3 setup.py <build-option> -v > build.log 2>&1
コンパイル・データベースを生成するには、
intercept-build –-parse-build-log
オプションを使用します。intercept-build -–parse-build-log build.log
他のビルドシステムを使用してコンパイル・データベースを生成#
プロジェクトが他のビルドシステムを使用する場合、intercept-build
でプロジェクトのビルドログからコンパイル・データベースを生成できます。
プロジェクトのビルドログからコンパイル・データベースを生成する場合、詳細なビルドログを生成するための適切なオプションを使用してプロジェクトをビルドしてください。
例:
ビルドシステム |
詳細なビルドログを生成するオプション |
Make |
|
CMake/Ninja |
|
Bazel |
|
folder-options-dpct サンプルを使用すると、ビルドログに基づいたコンパイル・データベースを表示できます。
folder-options-dpct
サンプル・ディレクトリーに移動します。詳細なビルドログを取得するオプションを指定して
make
を実行します。make VERBOSE=1 -B > ./build_log.txt The content of ``build_log.txt`` should look like the following: .. code-block:: none :linenos: nvcc -c -I./foo -I./foo/bar foo/main.cu -o foo/main.o nvcc -c -I./foo -I./foo/bar foo/bar/util.cu -o foo/bar/util.o nvcc ./foo/main.o ./foo/bar/util.o -o foo-bar
intercept-build
を使用して、--parse-build-log
オプションでコンパイル・データベースを生成し、ビルドログを指定します。intercept-build --parse-build-log=build_log.txt --work-directory=./
コンパイル・データベース
compile_commands.json
は、現在のディレクトリーに生成されます。
intercept-build の詳細については、intercept-build --help
を実行してください。