cmakeの使い方
[[https://cmake.org/cmake/help/latest/index.html][CMake Documentation]]
環境はbookwormです。
CMakeLists.txtを書く
1 # CMakeのバージョンを設定
2 cmake_minimum_required(VERSION 3.8)
3 # プロジェクト名と使用する言語を設定
4 set(APP_NAME hoge)
5 project(${APP_NAME} VERSION 0.0 LANGUAGES CXX)
6
7 # C++標準の指定
8 set(CMAKE_CXX_STANDARD 17)# 11,14,17(3.8),20(3.12),23(3.20),26(3.25)
9 set(CMAKE_CXX_STANDARD_REQUIRED ON)
10
11 add_definitions("-Wall")
12
13 #makeの完全な実行コマンドを表示
14 #set(CMAKE_VERBOSE_MAKEFILE 1)
15
16 #srcファイル名を記述。hppは不要
17 set(SRC
18 main.cpp
19 huga.cpp
20 gaoo.cpp
21 )
22
23 # APP_NAMEという実行ファイルをSRCから作成
24 add_executable(${APP_NAME} ${SRC})
make、実行ファイルの作成、実行
1 $ cmake -S . -B build
2 $ cmake --build build
3 $ ./build/hoge-S : path-to-src -B : path-to-build –build <build dir>
buildという名前のdirectoryを作成し、その中で作業を全部してくれる。
<build dir>を作らなくても、このスクリプトで勝手に作成してくれる。
makeを叩かなくても、実行ファイルを作成(2行目のcmakeで.oを作成,link)。
src修正時は、buildに入って、makeする(cmakeは不要)
srcを複数directoryに分割している場合
directoryごとにCMakeLists.txtを用意
- main.cpp,huga.cpp,gaoo.cpp
CMakeLists.txt
subdir
|- CMakeLists.txt
|- subf.cpp
|- subf.hpp
subdir/CMakeLists.txt
subdirをまとめて1つのLIBにする。
1 cmake_minimum_required(VERSION 3.8)
2 set(SRC_SUB subf.cpp)
3 set(LIB sub)#subという名前をつける。
4
5 #libraryとして結合するとき
6 add_library(${LIB} STATIC ${SRC_SUB})
7 #objectとして結合するとき
8 add_library(${LIB} OBJECT ${SRC_SUB})
CMakeLists.txtに以下追記
subdirのLIB(sub)を結合する
ライブラリとして結合する場合
1 add_subdirectory(subdir)
2 target_link_libraries(${APP_NAME} PRIVATE sub)
オブジェクトとして結合する場合
add_executableを修正
1 add_subdirectory(subdir)
2 add_executable(test test.cpp $<TARGET_OBJECTS:sub>)
ライブラリ結合
rt pthread (調査中)
LDLIBS = -lm -lrt -pthread
set(THREADS_PREFER_PTHREAD_FLAG ON) find_package(Threads REQUIRED) target_link_libraries(main Threads::Threads)
引用元
https://qiita.com/yumetodo/items/bd8f556ab56298f19ba8
https://stackoverflow.com/questions/1620918/cmake-and-libpthread
そのうち動作確認します
realtime
調査中
Eigen
find_package(Eigen3 REQUIRED)
message(STATUS "Found Eigen-" ${EIGEN3_VERSION_STRING})
#add_executableのあとに追加
target_link_libraries(main Eigen3::Eigen)
OpenCV
https://blog.neno.dev/entry/2018/06/12/so-using-cmake/
find_package(OpenCV REQUIRED) #OpenCV見つけてきて
include_directories(${OpenCV_INCLUDE_DIRS}) #インクルードディレクトリ指定
add_executable(Main main.cpp) #吐き出す実行ファイルと使うソースコードの指定
target_link_libraries(Main ${OpenCV_LIBRARIES}) #ライブラリとリンク
参考 ディレクトリ指定おまじない
include_directories(/usr/local/include) link_directories(/usr/local/lib)
引用元,参考サイト
cmake install linux
https://qiita.com/shohirose/items/45fb49c6b429e8b204ac
eigen linux
https://qiita.com/kkoba775/items/405e178f04730094b161
#https://engineering.cocone.io/2023/11/27/cmake-beginner/
#ライブラリではなく、objectを直接リンク
#https://izadori.net/cmake_3/
#makeの完全な実行コマンドを表示
#https://qiita.com/termoshtt/items/539541c180dfc40a1189