cmake_minimum_required (VERSION 2.6) PROJECT(hello Java) SET(CMAKE_VERBOSE_MAKEFILE 1) IF("${hello_SOURCE_DIR}" STREQUAL "${hello_BINARY_DIR}") MESSAGE("In Source, building Java using ADD_CUSTOM_COMMAND()") SET(OLD_CUSTOM_COMMAND_WAY 1) ELSE("${hello_SOURCE_DIR}" STREQUAL "${hello_BINARY_DIR}") MESSAGE("Out of source, using built-in Java support") SET(OLD_CUSTOM_COMMAND_WAY ) ENDIF("${hello_SOURCE_DIR}" STREQUAL "${hello_BINARY_DIR}") IF(NOT OLD_CUSTOM_COMMAND_WAY) INCLUDE_DIRECTORIES(${hello_SOURCE_DIR} ${hello_BINARY_DIR} ) ADD_LIBRARY(hello A.java HelloWorld.java) ELSE(NOT OLD_CUSTOM_COMMAND_WAY) ADD_CUSTOM_COMMAND( OUTPUT ${hello_BINARY_DIR}/A.class MAIN_DEPENDENCY ${hello_SOURCE_DIR}/A.java COMMAND ${CMAKE_Java_COMPILER} ARGS -classpath . -d ${hello_BINARY_DIR} ${hello_SOURCE_DIR}/A.java) ADD_CUSTOM_COMMAND( OUTPUT ${hello_BINARY_DIR}/HelloWorld.class MAIN_DEPENDENCY ${hello_SOURCE_DIR}/HelloWorld.java DEPENDS ${hello_BINARY_DIR}/A.class COMMAND ${CMAKE_Java_COMPILER} ARGS -classpath . -d ${hello_BINARY_DIR} ${hello_SOURCE_DIR}/HelloWorld.java) ADD_CUSTOM_COMMAND( OUTPUT ${hello_BINARY_DIR}/hello.jar DEPENDS ${hello_BINARY_DIR}/A.class ${hello_BINARY_DIR}/HelloWorld.class COMMAND ${CMAKE_COMMAND} ARGS -E chdir ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_Java_ARCHIVE} -cvf hello.jar *.class) ADD_CUSTOM_TARGET(hello_jar ALL DEPENDS ${hello_BINARY_DIR}/hello.jar) ENDIF(NOT OLD_CUSTOM_COMMAND_WAY)