前回までの記事
- C++開発とCMake ~その1 : CMake入門~
- C++開発とCMake ~その2 : 自作ライブラリの作り方~
- C++開発とCMake ~その3 : 外部ライブラリを自前でビルドして使う(OSC with liblo)~
CMakeとC++の記事をいくつか書いたが、実はまだcmakeコマンドの基本について知らない。 なぜならVSCodeの拡張にやってもらっていたからだ。 とはいえCMakeの基本コマンドについて理解しないといけないのでここにメモする。
CMake基本コマンド
セットアップ
現在のソースファイルの構成は以下の通り
.
├── CMakeLists.txt
├── README.md
├── data
│ └── sample.csv
├── include
│ ├── CSVParser.h
│ └── MyClass.h
└── src
├── CSVParser.cpp
├── MyClass.cpp
└── main.cpp
CMakeLists.txtは以前に書いたものをそのままつ書く。 https://github.com/gollowars/cpp_cmake_bootstrap/blob/main/CMakeLists.txt
cmake_minimum_required(VERSION 3.0.0)
# プロジェクト名
project(Example VERSION 0.1.0)
# C++標準の設定
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True) ## C++11であることを指定して、C++11以外のコンパイラを使うとエラーにする
# buildターゲット(この場合はPROJECT_NAMEであるExampleに)main.cppを追加
add_executable(${PROJECT_NAME} ./src/main.cpp)
# ヘッダーファイルの読み込み
target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include)
## ソースファイルを追加する
set(MY_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src)
target_sources(${PROJECT_NAME} PRIVATE
${MY_SOURCE_DIR}/MyClass.cpp
${MY_SOURCE_DIR}/CSVParser.cpp
)
## assetをコピーする
configure_file(${CMAKE_SOURCE_DIR}/data/sample.csv ${CMAKE_CURRENT_BINARY_DIR}/data/sample.csv COPYONLY)
get_target_property(headers ${PROJECT_NAME} SOURCES)
message(STATUS "headers : ${headers}") # これはあってもなくても良いけどメッセージを確認す
cmakeコマンドの実行
mkdir build
cmake -S . -B build
cmake --buid build
オプション | 説明 |
---|---|
-S <path-to-source> | ソースディレクトリを指定する |
-B <path-to-build> | ビルドディレクトリを指定する |
--build <dir> | ビルドディレクトリを指定する |
ビルドするときはソースディレクトリとは別にビルドディレクトリを作成するのが一般的とのこと。 ぐちゃぐちゃになったら困るしね。 いろいろオプションありそうだけど、CMakeLists.txtで指定できるものはそっちでするべきぽい。 基本はこのコマンド知ってればおkかな。
ちなみに以下でも同じ。
mkdir build
cd build
cmake ..
cmake --build .
とのことで、コマンドバージョン
cmake -S . -B build
-- The C compiler identification is AppleClang 14.0.0.14000029
-- The CXX compiler identification is AppleClang 14.0.0.14000029
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /Applications/Xcode_14.2.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /Applications/Xcode_14.2.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- headers : ./src/main.cpp;/Users/gollowars/works/sony_cam_util/100_dev/00_ex/src/MyClass.cpp;/Users/gollowars/works/sony_cam_util/100_dev/00_ex/src/CSVParser.cpp
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/gollowars/works/sony_cam_util/100_dev/00_ex/build
[23-04-28 17:14:51] gollowars:~/works/sony_cam_util/100_dev/00_ex % cmake --build build
[ 25%] Building CXX object CMakeFiles/Example.dir/src/main.cpp.o
[ 50%] Building CXX object CMakeFiles/Example.dir/src/MyClass.cpp.o
[ 75%] Building CXX object CMakeFiles/Example.dir/src/CSVParser.cpp.o
[100%] Linking CXX executable Example
[100%] Built target Example
[23-04-28 17:15:03] gollowars:~/works/sony_cam_util/100_dev/00_ex % open .
[23-04-28 17:15:05] gollowars:~/works/sony_cam_util/100_dev/00_ex % build/Example
Hello, world test7 !
C++17
42
file is open
size : 4
name,age,gender,
Alice,25,Female,
Bob,30,Male,
Charlie,40,Male,
OK
余談 : Xcode
Xcode向けのbuildをするときは以下のコマンドを実行するでよいのかな?
cmake -G Xcode -S . -B build
cmake --build build
オプション | 説明 |
---|---|
-G <generator-name> | ジェネレーターを指定する |
xcodeを使わずにcmakeでiosアプリのbuildもできるらしい。 cmakeを使ってxcodeを使わずにiosアプリを作成する
その他オプション
使ったオプションメモってく。
オプション | 説明 | example |
---|---|---|
-DCMAKE_BUILD_TYPE | ビルドタイプの指定 | cmake -DCMAKE_BUILD_TYPE=Debug .. |
-DCMAKE_OSX_ARCHITECTURES | macosでcpuアーキテクチャの指定 | cmake -DCMAKE_OSX_ARCHITECTURES=arm64;x86_64 .. |
C++開発シリーズ
- C++開発とCMake ~その1 : CMake入門~
- C++開発とCMake ~その2 : 自作ライブラリの作り方~
- C++開発とCMake ~その3 : 外部ライブラリを自前でビルドして使う(OSC with liblo)~
- CMakeコマンド基本中の基本
- VSCodeでC++開発 拡張機能CMake ToolsとC/C++の設定