CMake(c++ ビルドツール)

M5stackとかだと、VScode使うとアドオンでPlatformIO入れればビルドツールにもなりますが、それ以外のプロジェクトだとやはり専用のビルドツールが必要だと思う。RaspberryPIも開発はパソコン上でやるのが効率的なわけだし、クロスプラフォームで統一的に使えるツールとしてはCMakeが便利そうなので、これを使ってみます。

以下の実行環境はMacBookです。

インストールしたのはGUI版とCUI版ですが、実用的にはCUI版の方が使いやすそうだから、実際に使ったのはそちら。

<ディレクトリ構造>

<header.hpp>

2行目は実装されていません。

void show_val(int val);
void show_val();

extern int val_e;

<header.cpp>

#include "header.hpp"

#include <iostream>

using namespace std;


int val_e = 98;

void show_val(int val){
    cout << "val = " << val << endl;
}

<main.cpp>

#include "header.hpp"

#include <iostream>

using namespace std;


int main(){
    show_val(19);
    cout << "val_e " << val_e << endl;
}

 

作業はbuildディレクトリを作成してその中で行います。

<CMakeLists.txt>

cmake_minimum_required(VERSION 3.22)
project(build_sample CXX)
add_executable(main main.cpp)

例を参考に、こんなmake条件を設定しています。ソースファイルは2個あるのでそれを指定、ヘッダーファイルはソース中で#includeされるから設定不要。

<実行コマンド>

configure & generate

% cmake ..
-- The CXX compiler identification is AppleClang 13.0.0.13000029
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: ~~~~~省略~~~~~/build

build

ディレクトリを一階層上に移動して、

% cmake --build .
Consolidate compiler generated dependencies of target main
[ 33%] Building CXX object CMakeFiles/main.dir/header.cpp.o
[ 66%] Linking CXX executable main
[100%] Built target main

作成された、実行ファイルmainを実行(./main)するときちんと実行できました。

% ./main
val = 19
val_e = 98

 

P.S. 2022/11/6

ディレクトリの移動は必ずしも必須ではなくてコマンドのパラメータ次第で、buildディレクトリに移動しなくともビルドはできます。

覚書から、

https://qiita.com/tchofu/items/69dacfb93908525e5b0b

% cmake [<options>] -S <path-to-source> -B <path-to-build>

-例-

% cmake -S . -B build // @upper dir of the build dir

% cmake –build <dir> –target <tgt>… [<options>] [– <build-tool-options>]

-例-

% cmake –build build // @upper dir of the build dir, <dir> is build

 

admin

カテゴリーc++