私はこのようなことを達成しようとしているプロジェクトを持っています。(そして、一部の Android NDK は android-cmake を使用して動作しますが、成功は限られていますが、それはあなたの質問のポイントではありません。)
CMake は、Java を構築するためのオプションをサポートしています。[注 1 を参照] しかし、それはまさにその方向性です: このビルド システムに関する限り、ネイティブ コードは第一級市民です。CMake を Java ワークフローのコンポーネントとして、 ant/maven またはその性質のものの下で使用する人もいます。「より大きな」ビルドの範囲内で CMake プロジェクトをロードするさまざまなプラグインがあります。
しかし、これは CMake のジェネレーターの価値を本当に阻害していると思います。そうして調べたのですが、結局そのルートには行きませんでした。それは本当にあなたが自分でしなければならない選択です。(このプロジェクトにはJavaではなくJavaが含まれていることがわかりました。そのため、あなたが求めているようなことをするのは理にかなっています。)
ここに問題があります: add_jar には、ちょっとしたブラックボックスの魔法があります。UseJNI を統合したい場合は...まあ、それをサポートする方法はあまり見つかりませんでした。(CMake 2.8.x に含まれるモジュールのソースを読むと、CMAKE_JNI_TARGET のようなものが公開されます。実際に機能することはありませんでしたが、とにかく含めました。この問題に対する私のカスタム ソリューションは次のとおりです。
Java を使用するプロジェクトのトップレベル CMakeLists.txt に適したもの
役立つマクロの定義が含まれています: javah
ネイティブ ライブラリでマクロを使用する方法のサンプル
[1] この記事の執筆時点では、次の 2 つの方法があるようです。
- project(PROJECT_NAME Java) を介して、汎用 Java コンパイラを見つける必要があることを CMake に通知します。
- find_package({Java, JNI}) は、add_jar を含むもう少し多くの機能を公開します。
これは、私がかなり参照していることに気付いた後者の参照です。
幸運を。