CMakeLists.txt 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. PROJECT (ExternalOBJ)
  2. # Build the external object file.
  3. TRY_COMPILE(EXTERNAL_OBJECT_BUILT
  4. ${ExternalOBJ_BINARY_DIR}/Object
  5. ${ExternalOBJ_SOURCE_DIR}/Object
  6. Object
  7. external
  8. OUTPUT_VARIABLE OUTPUT
  9. )
  10. SET(EXTERNAL_OBJECT_NAME "external_object${CMAKE_CXX_OUTPUT_EXTENSION}")
  11. IF(EXTERNAL_OBJECT_BUILT)
  12. MESSAGE(
  13. "Building ${EXTERNAL_OBJECT_NAME} succeeded with the following output:\n"
  14. "[${OUTPUT}]"
  15. )
  16. ELSE(EXTERNAL_OBJECT_BUILT)
  17. MESSAGE(FATAL_ERROR
  18. "Building ${EXTERNAL_OBJECT_NAME} failed with the following output:\n"
  19. "[${OUTPUT}]"
  20. )
  21. ENDIF(EXTERNAL_OBJECT_BUILT)
  22. # Find the external object file.
  23. SET(BASE ${ExternalOBJ_BINARY_DIR}/Object)
  24. SET(EXTERNAL_OBJECT)
  25. FOREACH(dir external.dir . ${CMAKE_CONFIGURATION_TYPES})
  26. IF(NOT EXTERNAL_OBJECT)
  27. IF(EXISTS ${BASE}/${dir}/${EXTERNAL_OBJECT_NAME})
  28. SET(EXTERNAL_OBJECT ${BASE}/${dir}/${EXTERNAL_OBJECT_NAME})
  29. ENDIF(EXISTS ${BASE}/${dir}/${EXTERNAL_OBJECT_NAME})
  30. ENDIF(NOT EXTERNAL_OBJECT)
  31. ENDFOREACH(dir)
  32. IF(NOT EXTERNAL_OBJECT)
  33. FILE(GLOB_RECURSE EXTERNAL_OBJECT
  34. "${ExternalOBJ_BINARY_DIR}/Object/${EXTERNAL_OBJECT_NAME}")
  35. ENDIF(NOT EXTERNAL_OBJECT)
  36. IF(EXTERNAL_OBJECT)
  37. MESSAGE("Found \"${EXTERNAL_OBJECT}\".")
  38. ELSE(EXTERNAL_OBJECT)
  39. MESSAGE(FATAL_ERROR "Could not find ${EXTERNAL_OBJECT_NAME}.")
  40. ENDIF(EXTERNAL_OBJECT)
  41. # Test creation of external objects by custom commands.
  42. SET(CUSTOM_OBJECT
  43. ${CMAKE_CURRENT_BINARY_DIR}/custom_object${CMAKE_C_OUTPUT_EXTENSION})
  44. ADD_CUSTOM_COMMAND(
  45. OUTPUT ${CUSTOM_OBJECT}
  46. COMMAND ${CMAKE_COMMAND} -E copy ${EXTERNAL_OBJECT} ${CUSTOM_OBJECT}
  47. DEPENDS ${EXTERNAL_OBJECT}
  48. )
  49. # Build an executable using the external object file.
  50. ADD_EXECUTABLE(executable executable.cxx ${CUSTOM_OBJECT})