[openFrameworks] addon_config.mkについて

addon_config.mk についての説明が殆ど見当たらないのでソースコード追いながらまとめてみた.

`ofxHogehoge/src` しか存在しないようなaddonだと殆ど要らないけどヘッダーサーチパスとか毎回追加しなきゃいけないようなaddonにはaddon_configを書いてあげると優しいですね.

## 注意

* もっぱらosx/Xcodeで調べてます.
* コードベースで追っかけただけなので間違いも混ざってる可能性は大いにあります. 間違いの指摘やwin/linux環境での挙動等の情報お待ちしております.
* タグは準備されてるけどコード見たら使われてないっぽいのも多々あってなかなか...

# metaタグ

* ADDON_NAME
    * 名前
* ADDON_DESCRIPTION
    * 説明
* ADDON_AUTHOR
    * 作者
* ADDON_TAGS
    * タグ（ofxaddons.com等で使われていると思われる）
* ADDON_URL
    * 配布URL （もっぱらgithubのアドレス）

### ex

```
meta:
    ADDON_NAME = ofxHogehoge
    ADDON_DESCRIPTION = let's hogehoge
    ADDON_AUTHOR = 2bit
    ADDON_TAGS = "foo" "bar" "baz baz"
    ADDON_URL = https://github.com/2bbb/ofxHogehoge
```

# 環境依存条件分岐タグ

- common
  - 共通処理. 大抵はここの中に書く.

- linux
- linux64
- msys2
  - MinGW
- VS
  - win + visual studio
- linuxarmv6
- linuxarmv7
- android/armeabi
  - Android ARM v5
- android/armeabi-v7a
  - Android ARM v7
- android/x86
- emscripten
- ios
- osx

# 具体的な設定項目

## ADDON_DEPENDENCIES

- 他のaddonへの依存関係
  - これを追記しておくとPGで勝手に追加されると良いなーと思うんだけどコード的には使われてないっぽい
  - パースされたデータは `std::vector<std::string> ofAddon::dependeincies` に突っ込まれる

### ex

```
ADDON_DEPENDENCIES  = ofxOsc
ADDON_DEPENDENCIES += ofxPubSubOsc
# or
ADDON_DEPENDENCUES  = ofxOsc ofxPubSubOsc
```

## ADDON_INCLUDES / ADDON_INCLUDES_EXCLUDE

- インクルードパスが必要な場合に指定する
  - XcodeだとBuild Settings > Header Search Pathsに追加される
- 除外したい場合は ADDON_INCLUDES_EXCLUDE に追加する
- EXCLUDE中の`%`はワイルドカードとして機能する

### ex

```
common:
ADDON_INCLUDES  = libs/hoge/includes
ADDON_INCLUDES += libs/fuga/includes

osx:
ADDON_INCLUDES_EXCLUDE  = libs/fuga/includes/win32
ADDON_INCLUDES_EXCLUDE += libs/fuga/includes/win64

vs:
ADDON_INCLUDES_EXCLUDE  = libs/fuga/includes/osx
```

## ADDON_CFLAGS

- cファイルのコンパイル時に付けるフラグ
  - XcodeだとBuild Settings > Other C Flagsに追加される

## ADDON_CPPFLAGS

- cppファイルのコンパイル時に付けるフラグ
  - XcodeだとBuild Settings > Other C++ Flagsに追加される

## ADDON_LDFLAGS

- ldに付けるフラグ
- `ADDON_LDFLAGS = -Xlinker -rpath -Xlinker @executable_path` ってやるとmacとかで幸せになれるかも
  - XcodeだとBuild Settings > Other Linker Flagsに追加される



## ADDON_LIBS / ADDON_LIBS_EXCLUDE

- 外部ライブラリを追加するために使う
- `libhoge.a` とか `libhoge.dylib` とかを記述する
  - XcodeだとBuild Settings > Other Linker Flagsに追加される
- 除外したいファイルはEXCLUDEに
- EXCLUDE中の`%`はワイルドカードとして機能する


## ADDON_PKG_CONFIG_LIBRARIES

- Linux用
- Linuxは詳しくないので誰か分かる人教えてください



## ADDON_FRAMEWORKS

- OSX, iOS用
- .frameworkを追加する.

## ADDON_SOURCES / ADDON_SOURCES_EXCLUDE

- プロジェクトのソースファイルとして追加される
- 追加したくない場合はADDON_SOURCES_EXCLUDEに指定する
- EXCLUDE中の`%`はワイルドカードとして機能する

## ADDON_HEADER_SOURCES / ADDON_OBJC_SOURCES / ADDON_CPP_SOURCES

- ADDON_SOURCES も拡張子でタイプは調べてくれてるので多分そんなに使わない

## ADDON_DATA

- プロジェクトのbin/dataにコピーする
  - 
ためのタグだと思うけど何も使われてないっぽい

  - パースされたデータは `std::vector<std::string> ofAddon::data` に突っ込まれる
  - [追記 2022/03/09] 実装されてます（いつからかまで追ってませんが...）
    - ただし, コメントには wildcard として * とか ? が使える的なことが書かれてるけど多分使えない？
    - addonディレクトリからの相対パスで `ADDON_DATA = ./MyAddonData` とかって書いておくと `bin/data` にコピーされます
    - ディレクトリを指定するとディレクトリごとコピーされます

## ADDON_DLLS_TO_COPY

- windows用
  - dllをbinに追加

## ADDON_DEFINES

- defineマクロを定義する
  - 
`DEF_HOGE=BAR` みたいな `=` を使った形は使えないっぽい

    - PR投げてマージされました. 0.10.1からは使えるはず. 多分.
  - 
Xcodeではそもそも動かない？
 masterブランチだとちゃんと動いた
  - XcodeだとBuild Settings > Preprocessor Macrosに追加される

## ADDON_AFTER (加筆 2019/01/22)

[projectGenerator/issues/171](https://github.com/openframeworks/projectGenerator/issues/171) によると `ADDON_AFTER` というのが追加されるっぽい？
arturo的には既に実装されてると思ってたっぽいけどソースコードには `ADDON_AFTER` という文字列は見当たらない.
けど, 実装されたら便利そうなので祈りましょう.

## 追記

ということでマクロやフラグに `=` が使えない問題の修正のPR（とXcodeのファイル順がぐちゃぐちゃになる問題の修正のPR）を反映したfrontendのバイナリを作ってアップしています.
macos: https://drive.google.com/open?id=1qal2sZ81Up1g-GyfgCYzgDgHerBUyPsD
win32: https://drive.google.com/open?id=1kYOG9rTXhpGq26wKjK7xlOS2TyDXjGT3

これでaddonでC++14を使ったりも出来るようになりますね.
例: https://github.com/2bbb/ofxCpp14

ビルドの仕方も環境によって色々難しいのでまとめたいところ...