4

CMakeでJNIjarを作成しようとしています。そのためには、以下を適切な順序で実行する必要があります。

  1. .classファイルをコンパイルする
  2. .hヘッダーを生成します
  3. ネイティブライブラリを構築する
  4. すべてを瓶に入れる

どこ

  1. で行われますadd_jar()(custom_commandでそれを好んだ)
  2. で行われますadd_custom_command(TARGET ...)
  3. で行われますadd_library()
  4. で行われadd_custom_command(TARGET ...)ます(-Cオプションはadd_jarでサポートされていないため)

適切な順序に従っていることを確認するにはどうすればよいですか?最初の実行時にエラーが発生することがあります。

add_custom_commandPOST/PREビルドオプションがありますがadd_jar、ありadd_libraryません。add_custom_command引数がないものにTARGETDEPENDSオプションがありますが、それを使用する必要がありますか?

add_library2.カスタムコマンドが実行されるのを待つように指示する方法はありますか?

4

1 に答える 1

8

add_libraryエラーは、CMakeの最初の実行時にまだ存在していないソースファイルで呼び出していることだと思いますか?

その場合はGENERATED、コマンドを使用してこれらのソースファイルにプロパティを設定できますset_source_files_properties。これにより、CMakeは、これらのファイルが構成時に存在しなくても(CMakeの実行時に)、ビルド時に存在することを認識します。

add_jarコマンドがの前に実行されるようにするには、を使用してターゲットadd_libraryへの依存関係を作成します。コマンドがの前に実行されるようにするには、カスタムコマンドにオプションを使用させます。add_jaradd_dependenciesadd_custom_commandadd_libraryTARGET ... PRE_BUILD

たとえば、libのソースのリストが、という変数に保持されている場合${Srcs}、次のことができます。

# Allow 'Srcs' to not exist at configure-time
set_source_files_properties(${Srcs} PROPERTIES GENERATED TRUE)
add_library(MyLib ${Srcs})

# compile .class files
add_jar(MyJarTarget ...)

# generate .h headers
add_custom_command(TARGET MyLib PRE_BUILD COMMAND ...)

# Force 'add_jar' to be built before 'MyLib'
add_dependencies(MyLib MyJarTarget)
于 2013-03-21T01:27:38.357 に答える