CMakeとは? | C, C++, CUDA, Fortran, assemblerなどのプロジェクトのビルドをコンパイラに依存せず自動化するためのツール | ||||||||||
CMakeLists.txt | CMakeのための設定ファイル: cmake_minimum_required(VERSION 3.1), project(hello_worldプロジェクト名 CXX言語), ターゲットadd_executable(main_app実行ファイル名 main.cppソース)
dd_executable(main_app main.cpp my_class1.cpp my_class2.cpp) 複数ソースのとき | ||||||||||
version | cmake --version , CMakeLists.txtのtopにcmake_minimum_required(VERSION 3.1)、lxplusでは lsetup cmake | ||||||||||
Configure | CMakeに実行させてビルドに必要な情報を収集する作業。 | ||||||||||
Generate | Configureで集めた情報を基に自分の開発環境に合わせたプロジェクトファイルを生成する作業。 cmake --helpで可能なGenerator listが出る。*(defaultを示す) Unix Makefiles = Generates standard UNIX makefiles | ||||||||||
build/ | 作業用のディレクトリ ここから@cmake ..を実行する。-- Configuring done、-- Generating doneなら成功。するとMakefile, cmake_install.cmake, CMakeFiles/, CMakeCache.txtが出来る。 | ||||||||||
ビルド(実行ファイル作成) | Acmake --build .でXXX_app*(実行ファイル)が作られる。単にmakeでもいいみたい。 | ||||||||||
add_executable | CMakeLists.txtで最も中心的な関数。例:add_executable(hello main.cpp src/Blah.cpp) | ||||||||||
target_include.. | .hファイルなどを入れるためかしら。 target_include_directories(hello PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include) | ||||||||||
add_library() | CMakeLists.txtで最も中心的な関数。add_subdirectory(blah)でつくったtarget名blahLIBをtarget_link_libraries(hello3 PUBLIC blahLIB)と取り込む。subdirectoryの中でもadd_library(blohLIB,STATIC,Bloh.cpp)を含むCMAkeLists.txtを作っておくこと。階層化だな。 | ||||||||||
message("...") | printfと同じ。message("project name is automaically set as: ${PROJECT_NAME}") | ||||||||||
階層化 | uftree/というsubdirectoryに、もう一つのCMakeLists.txt,include/,src/をおく。 | ||||||||||
動的リンク(dynamic linking) | リンクが不完全な実行ファイルを作成しておいて実行時にリンクを行う。Linuxではlib*.so | ||||||||||
動的読み込み | 自分のソースコードの中で明示的に「xxxという名前の動的リンクライブラリの中のyyyという関数を呼び出す」という風に記述しておきます。 こうすることでライブラリファイルを後付けで動的リンクさせることができます。 | ||||||||||
動的リンク(dynamic linking) | リンクが不完全な実行ファイルを作成しておいて実行時にリンクを行う。Linuxではlib*.so | ||||||||||
動的読み込み | 自分のソースコードの中で明示的に「xxxという名前の動的リンクライブラリの中のyyyという関数を呼び出す」という風に記述しておきます。 こうすることでライブラリファイルを後付けで動的リンクさせることができます | ||||||||||
キャッシュ変数 | set(ccmake | キャッシュcache(貯蔵所)変数の値を操作 ccmake .. -G"Unix Makefiles"でgeneratorを指定。ccmake ..で画面が立ち上がるので、変更できる。
| ビルドタイプの設定 | CMAKE_BUILD_TYPE Makefile系ではcmake .. -DCMAKE_BUILD_TYPE=Release
| find_package() | 特定の名前のCMakeスクリプトを探し出し、それを実行するコマンドです。Module, Configの順で探索を行い、目的のスクリプトファイルが見つかったらその中身を実行してコマンドを終了。 | find_package(...REQUIRED | find_package(Boost REQUIRED ..)ライブラリが発見できなかった場合には直ちに処理が停止します。
| Library | gcc main.c -I | |