| 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(executable executable.cxx ${CUSTOM_OBJECT}) |