Eclipse CDTでGitに落ちてるライブラリを静的ライブラリにするまで


みなさ～～んC++の闇に飲まれていますか～～～？
なんであんなに暗黙に動作することが多いんでしょうねJava・Pythonからやってきた自分は心が折れそうです。


# 注意！！
この記事は

* Eclipse Version: 2020-09 (4.17.0)
* **GCC 4.9.0**
* 動作環境: Beagle Bone Black(ARMプロセッサ)
* Windows PCでクロスコンパイルして転送

という極めて時代遅れなコンパイラと特殊な動作環境での結果をもとに書かれています。ほかの環境で確実に動作するかは保証できませんのであしからず・・・


## .a(静的ライブラリ化)する使用ライブラリ
* fmt 7.1.0
https://github.com/fmtlib/fmt

## 手順

### 1.cloneしてくる
zipで落としてくるなり、cloneするなりご自由に。

### 2.Eclipseを起動する
起動したらNew Project→C++ Managed Build→Executable, Empty～を選択→Cross GCC→あとはクロスコンパイルのパスとか設定する。

ここで下の画像二枚目のようにExecutableのEmptyを選択するのがキモ。

![スクリーンショット 2020-11-21 022920.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703910/59716e63-6d67-f340-6065-d9a7a2a441af.png)

![スクリーンショット 2020-11-21 023033.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703910/fd5908f0-49e2-d7c4-21ba-84f3306d962d.png)


### 3. ライブラリを作成するための各種設定
プロジェクトがEmptyなのでプロジェクト名を右クリックしてNew→Source Folderでsrcという名前のフォルダを追加する。

![スクリーンショット 2020-11-21 023445.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703910/5d6e91d5-d93c-0ac3-a9c7-80586084c5e4.png)

そして上部のProject→PropertiesでProjectの設定を開く。なぜか押せないという人は一回Project Explorerで選択してからやること。

![スクリーンショット 2020-11-21 024002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703910/4b027da8-1b13-33a3-00fd-db455abc8e40.png)


下記の画像のように設定を変更する。ConfigurationをRelease、Artifact TypeをStatic Libraryにする。Applyを押して終了。
![スクリーンショット 2020-11-21 024318.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703910/8bb56e07-485b-762d-87c9-7379a9efd635.png)


また、必要であればC++バージョンを指定する。
![スクリーンショット 2020-11-21 024530.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703910/0e2af392-b112-502e-4bca-15e5e2da62ec.png)


ところでなんでBBBはLinux Kernel3.x以降slots捨てたんでしょうかね。メンテが大変過ぎたみたいなこと書いてあったけど、これじゃ一から理解するのも大変だし過去の資料が丸々役に立たなくなってなんにもなりませんでした。とてもつらいです。Kernelが上げられないせいでC++20はもちろん完全なC++14も使えないし大変困った。なんかいい方法ないですかね。

### 4. コンパイル
![スクリーンショット 2020-11-21 025733.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703910/65450299-be2e-8228-90c7-b0e6636be22a.png)

Project Explorerからプロジェクトを右クリック→Build Configuration, Set activeでReleaseを選択。
コンパイルボタンを押す。するとプロジェクトのルートにReleaseフォルダが作られ、その中に○○.aというものが出来上がっているはず。


### 5. 使用する側のプロジェクトでインクルードする

![スクリーンショット 2020-11-21 030226.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703910/2e336df8-e0fa-5b5e-59a5-028b2acd6f1a.png)
インクルードヘッダが入ったフォルダを指定する。クローンしたライブラリのフォルダから適当に抜いておく。

![スクリーンショット 2020-11-21 030326.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703910/910db687-a36f-3a66-5c12-d5d83fd8ed15.png)
ここで指定するライブラリの実体、先ほど作ったファイルの名前は頭の"lib"と拡張子の".a"はつけないこと。つけるとリンクできません。

![スクリーンショット 2020-11-21 030407.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703910/680a5c39-ae00-330e-6075-7ca0392360fb.png)
ここにはライブラリのファイルを探すディレクトリを選択しておく。

### 6. 適当にインクルードして実行
完成！！

```C++:Main.cpp

#include <iostream>
#include <string>
#include <fmt/core.h>
#include <stdio.h>

using namespace std;

int main() {
  fmt::print("Don't {}\n", "panic");
  return 0;
}

```


![スクリーンショット 2020-11-21 031314.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703910/a6efe0ca-4699-234e-5675-08656397080c.png)

## 完
本当にC++20使いたい
PythonかJavaの世界に帰りたい・・・