PROJECT (ExternalOBJ) IF(APPLE) # set _CMAKE_OSX_MACHINE to umame -m EXEC_PROGRAM(uname ARGS -m OUTPUT_VARIABLE _CMAKE_OSX_MACHINE) # check for Power PC and change to ppc IF("${_CMAKE_OSX_MACHINE}" MATCHES "Power") SET(_CMAKE_OSX_MACHINE ppc) ENDIF("${_CMAKE_OSX_MACHINE}" MATCHES "Power") SET(CMAKE_OSX_ARCHITECTURES ${_CMAKE_OSX_MACHINE}) ENDIF(APPLE) # Build the external object file. TRY_COMPILE(EXTERNAL_OBJECT_BUILT ${ExternalOBJ_BINARY_DIR}/Object ${ExternalOBJ_SOURCE_DIR}/Object Object external OUTPUT_VARIABLE OUTPUT ) SET(EXTERNAL_OBJECT_NAME "external_object${CMAKE_CXX_OUTPUT_EXTENSION}") IF(EXTERNAL_OBJECT_BUILT) MESSAGE( "Building ${EXTERNAL_OBJECT_NAME} succeeded with the following output:\n" "[${OUTPUT}]" ) ELSE(EXTERNAL_OBJECT_BUILT) MESSAGE(FATAL_ERROR "Building ${EXTERNAL_OBJECT_NAME} failed with the following output:\n" "[${OUTPUT}]" ) ENDIF(EXTERNAL_OBJECT_BUILT) # Find the external object file. SET(BASE ${ExternalOBJ_BINARY_DIR}/Object) SET(EXTERNAL_OBJECT) FOREACH(dir external.dir . ${CMAKE_CONFIGURATION_TYPES}) IF(NOT EXTERNAL_OBJECT) IF(EXISTS ${BASE}/${dir}/${EXTERNAL_OBJECT_NAME}) SET(EXTERNAL_OBJECT ${BASE}/${dir}/${EXTERNAL_OBJECT_NAME}) ENDIF(EXISTS ${BASE}/${dir}/${EXTERNAL_OBJECT_NAME}) ENDIF(NOT EXTERNAL_OBJECT) ENDFOREACH(dir) IF(NOT EXTERNAL_OBJECT) FILE(GLOB_RECURSE EXTERNAL_OBJECT "${ExternalOBJ_BINARY_DIR}/Object/${EXTERNAL_OBJECT_NAME}") ENDIF(NOT EXTERNAL_OBJECT) IF(EXTERNAL_OBJECT) MESSAGE("Found \"${EXTERNAL_OBJECT}\".") ELSE(EXTERNAL_OBJECT) MESSAGE(FATAL_ERROR "Could not find ${EXTERNAL_OBJECT_NAME}.") ENDIF(EXTERNAL_OBJECT) # Test creation of external objects by custom commands. SET(CUSTOM_OBJECT ${CMAKE_CURRENT_BINARY_DIR}/custom_object${CMAKE_C_OUTPUT_EXTENSION}) ADD_CUSTOM_COMMAND( OUTPUT ${CUSTOM_OBJECT} COMMAND ${CMAKE_COMMAND} -E copy ${EXTERNAL_OBJECT} ${CUSTOM_OBJECT} DEPENDS ${EXTERNAL_OBJECT} ) # Build an executable using the external object file. ADD_EXECUTABLE(ExternalOBJ executable.cxx ${CUSTOM_OBJECT})