仕事でAndroid NDKを触っているのですが、まぁ~これがまたAndroidStudioが不親切で情報が非常にすくないことで・・・。
なので完全にこれは愚痴かつ同じ悩みを持つ方へのヒントになればと思いココに備忘録代わりとして記載しておきます。
スポンサーリンク
CMakeLists.txtの相対パスがOKだったりNGだったりする
Androidのアプリを作成する際にサードパーティのライブラリを参照することは良くある話だと思うのですが(opensslとか)、これらをC++のソースで使いたい場合、つまりNDKにてライブラリを使いたい場合に、「CMakeLists.txt」にてパスを通すかと思います。
下記の様な形で、「CMakeLists.txt」から見た相対パスでライブラリのファイルを指定することが出来ます。(入力候補にも認識されて出てくるしね。)
ただしこれ、実際にビルドするとエラーになります。(候補にも出て来てるのに!?)
要はninjaがビルドする際に、「この相対パスだとライブラリの場所を認識できませんよ」というエラーなんですが、「CMakeLists.txt」上だと普通にパスが認識できているので、一見すると普通にコンパイルが通る様に見えてしまうんですよね。。。
(ビルドするまで分からない、おまけに見た目も相対パス上も正しい場所を指定している。。。)
このエラーの解決方法は、パス指定時に「${CMAKE_CURRENT_SOURCE_DIR}」を先頭に付けてあげれば解決できます。
「CMakeLists.txt」用の環境変数の様な定数なのですが、これを付ければビルドエラーは解消できます。
※「${CMAKE_ANDROID_ARCH_ABI}」はアーキテクチャ毎にフォルダを自動で切り替えてくれる定数です。
ただこれ、腑に落ちないのが、ライブラリのincludeフォルダの場所は「${CMAKE_CURRENT_SOURCE_DIR}」を付けなくても特にエラーにならないんですよね。。。
ビルドもエラーにならないし、実際にデバッグしてもエラーにならないのです。
「${CMAKE_CURRENT_SOURCE_DIR}」を付けても、付けなくてもエラーにはならないので、念のため付けていますが、なんとも腑に落ちない。。。
以上、初めてAndroid、Android NDKに触れた人間の愚痴でした。
スポンサーリンク