[CMake] Custom command or custom target for jni?
Jonatan Bijl
jonatan.bijl at tba.nl
Tue Mar 24 11:37:31 EDT 2009
I am setting up a jni project (Java Native Interface). A java class is
supposed to call native methods, and the native methods are to be
compiled into a dll/so.
To compile the native part, a c header file is generated from the java
class, using the "javah -jni" command. This header file should only be
generated if:
It does not exist yet
The java class changes
My first attempt was:
set(INTERFACE_HEADER_FILE
${PROJECT_BINARY_DIR}/include/main_java_nl_tba_Testproject_java_HelloWor
ld.h)
set(INTERFACE_JAVA_CLASS main.java.nl.tba.Testproject_Java.HelloWorld)
set(INTERFACE_JAVA_CLASS_FILE
${COMMON_ROOT_BIN_DIRECTORY}/main/java/nl/tba/Testproject_Java/HelloWorl
d.class)
add_custom_command(OUTPUT ${INTERFACE_HEADER_FILE}
COMMAND ${JNI_JAVAH} -jni -d ${PROJECT_BINARY_DIR}/include
${INTERFACE_JAVA_CLASS}
WORKING_DIRECTORY ${COMMON_ROOT_BIN_DIRECTORY}
COMMENT "generating jni header file ${INTERFACE_HEADER_FILE}"
)
set_source_files_properties(HelloWorld.c OBJECT_DEPENDS
${INTERFACE_HEADER_FILE})
add_library(HelloWorldNative SHARED HelloWorld.c
${INTERFACE_HEADER_FILE})
cMake however claims there is no rule to make the header file
I found somebody who used the following:
add_custom_target(
HelloWorldNativeHeader
COMMAND ${JNI_JAVAH} -jni -d ${PROJECT_BINARY_DIR}/include
${INTERFACE_JAVA_CLASS}
WORKING_DIRECTORY ${COMMON_ROOT_BIN_DIRECTORY}
COMMENT "generating jni header file ${INTERFACE_HEADER_FILE}"
)
add_library(HelloWorldNative SHARED HelloWorld.c
${INTERFACE_HEADER_FILE})
add_dependencies(HelloWorldNative HelloWorldNativeHeader)
If I understand the documentation correctly, this would force the file
to be generated every time. Is that correct?
Which one am I supposed to use? (Cmake 2.6)
If that is the first one, how can I make sure cmake can find the target?
Jonatan
-------------------------------------------------------------
This e-mail is intended exclusively for the addressee. If you
are not the addressee you must not read, copy, use or
disclose the e-mail nor the content; please notify us
immediately [by clicking 'Reply'] and delete this e-mail.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20090324/c8580603/attachment.htm>
More information about the CMake
mailing list