cmakeのインストールはソース版をコンパイルするか、バイナリ版をダウンロードできます。まだインストールしていない方は、cmakeのオフィシャルHPにいって「Download」リンクをクリックし、バイナリ版をダウンロードしてインストールをしてください。
cmakeはC/C++プロジェクトのビルドジェネレーターです。主な使用方法としては、
等があります。本書ではcmakeの用途は、Makefileの生成に限定させて頂きます。
cmakeでは「CMakeLists.txt」というテキストファイルを編集します。例えばOpenCLプロジェクト「sample」のMakefileをcmakeで生成するには、以下のように記述します。
basic_helloworld.cxx.
#include <iostream> using namespace std; int main() { cout << "Hello World!!!" << endl; // prints Hello World!!! return 0; }
basic_helloworld.cl.
__kernel void hello(__global int* abc) { // empty kernel }
cmake_minimum_required (VERSION 3.1) project(mult) find_package(OpenCL REQUIRED) //(1) include_directories(${OpenCL_INCLUDE_DIRS}) //(2) link_directories(${OpenCL_LIBRARIES}) //(3) add_executable (helloworld basic_helloworld.cxx) //(4) target_include_directories (helloworld PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) //(5) target_link_libraries (helloworld ${OpenCL_LIBRARIES}) //(6) configure_file(basic_helloworld.cl ${CMAKE_CURRENT_BINARY_DIR}/basic_helloworld.cl COPYONLY) //(7)
OpenCLパッケージを検索します。 | |
FindOpenCL.cmakeの変数「OpenCL_INCLUDE_DIRS」をインクルードするディレクトリとして指定。 | |
FindOpenCL.cmakeの変数「OpenCL_LIBRARIES」をリンクするライブラリとして指定。 | |
ターゲット「hellowolrd」と依存ファイル「basic_helloworld.cxx」をターゲットのルールとして追加。 | |
ターゲットのインクルードディレクトリとして「CMAKE_CURRENT_SOURCE_DIR」を指定。 | |
ターゲット「helloworld」とOpenCLライブラリをリンク。 | |
カーネルソースファイル「basic_helloworld.cl」をビルドディレクトリにコピー。 |
「cmake 3.1」以降には、「FindOpenCL.cmake」というモジュールが追加されています。パッケージが見つかると以下の変数が設定されます。
次に本書では、ビルドディレクトリをbuildディレクトリに統一しています。ソースファイルのあるディレクトリ上で以下のコマンドを叩いてください。
$ mkdir build $ cd build
この時点でコマンドプロンプトのワーキングディレクトリは、空のディレクトリであるbuildとなりました。この状態で「cmake ..」と入力頂くと、cmakeがMakefileの生成を行います。
$ cmake .. -- Looking for CL_VERSION_2_0 -- Looking for CL_VERSION_2_0 - not found -- Looking for CL_VERSION_1_2 -- Looking for CL_VERSION_1_2 - not found -- Looking for CL_VERSION_1_1 -- Looking for CL_VERSION_1_1 - not found -- Looking for CL_VERSION_1_0 -- Looking for CL_VERSION_1_0 - not found -- Found OpenCL: /System/Library/Frameworks/OpenCL.framework -- Configuring done -- Generating done -- Build files have been written to: /Users/komatsu/Documents/opencl-workspace/OpenCLBook/mult/build
これによりMakefile等のビルドファイルがbuildディレクトリに生成されます。
$ ls CMakeCache.txt basic_helloworld_cmake.cxx CMakeFiles cmake_install.cmake CMakeLists.txt helloworld.cl Makefile
最後にmakeコマンドを使いビルドを実行します。
$ make Scanning dependencies of target helloworld [100%] Building CXX object CMakeFiles/helloworld.dir/basic_helloworld_cmake.cpp.o Linking CXX executable helloworld [100%] Built target helloworld
これでビルドは完了です。プログラムの実行は以下のようにします。
$ ./helloworld Hello World!!!
もちろん読者もお気づきの通り、OpenCLとは関係のないプログラムです。しかしcmakeの設定は、OpenCLライブラリをプログラムにリンクしているため、OpenCLプログラムのソースファイルをビルドすることも可能です。
Copyright 2018-2019, by Masaki Komatsu