CMakeLists.txt 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. cmake_minimum_required (VERSION 3.9)
  2. project(ExportImport C CXX)
  3. if(NOT DEFINED CMake_TEST_NESTED_MAKE_PROGRAM AND NOT CMAKE_GENERATOR MATCHES "Visual Studio")
  4. set(CMake_TEST_NESTED_MAKE_PROGRAM "${CMAKE_MAKE_PROGRAM}")
  5. endif()
  6. # Wipe out the install tree to make sure the exporter works.
  7. add_custom_command(
  8. OUTPUT ${ExportImport_BINARY_DIR}/CleanupProject
  9. COMMAND ${CMAKE_COMMAND} -E remove_directory ${ExportImport_BINARY_DIR}/Root
  10. )
  11. add_custom_target(CleanupTarget ALL DEPENDS ${ExportImport_BINARY_DIR}/CleanupProject)
  12. set_property(
  13. SOURCE ${ExportImport_BINARY_DIR}/CleanupProject
  14. PROPERTY SYMBOLIC 1
  15. )
  16. get_property(_isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
  17. if(_isMultiConfig)
  18. set(NESTED_CONFIG_TYPE -C "${CMAKE_CFG_INTDIR}")
  19. else()
  20. if(CMAKE_BUILD_TYPE)
  21. set(NESTED_CONFIG_TYPE -C "${CMAKE_BUILD_TYPE}")
  22. else()
  23. set(NESTED_CONFIG_TYPE)
  24. endif()
  25. endif()
  26. if(MINGW OR MSYS)
  27. # Test CMAKE_GNUtoMS whether we have VS or not.
  28. set(ExportImport_GNUtoMS 1)
  29. endif()
  30. configure_file(${ExportImport_SOURCE_DIR}/InitialCache.cmake.in
  31. ${ExportImport_BINARY_DIR}/InitialCache.cmake @ONLY)
  32. # Build and install the exporter.
  33. add_custom_command(
  34. OUTPUT ${ExportImport_BINARY_DIR}/ExportProject
  35. COMMAND ${CMAKE_CTEST_COMMAND} ${NESTED_CONFIG_TYPE}
  36. --build-and-test
  37. ${ExportImport_SOURCE_DIR}/Export
  38. ${ExportImport_BINARY_DIR}/Export
  39. --build-noclean
  40. --build-project Export
  41. --build-target install
  42. --build-generator ${CMAKE_GENERATOR}
  43. --build-generator-platform "${CMAKE_GENERATOR_PLATFORM}"
  44. --build-generator-toolset "${CMAKE_GENERATOR_TOOLSET}"
  45. --build-options -C${ExportImport_BINARY_DIR}/InitialCache.cmake
  46. VERBATIM
  47. )
  48. add_custom_target(ExportTarget ALL DEPENDS ${ExportImport_BINARY_DIR}/ExportProject)
  49. add_dependencies(ExportTarget CleanupTarget)
  50. set_property(
  51. SOURCE ${ExportImport_BINARY_DIR}/ExportProject
  52. PROPERTY SYMBOLIC 1
  53. )
  54. # Build and install the importer.
  55. add_custom_command(
  56. OUTPUT ${ExportImport_BINARY_DIR}/ImportProject
  57. COMMAND ${CMAKE_CTEST_COMMAND} ${NESTED_CONFIG_TYPE}
  58. --build-and-test
  59. ${ExportImport_SOURCE_DIR}/Import
  60. ${ExportImport_BINARY_DIR}/Import
  61. --build-noclean
  62. --build-project Import
  63. --build-generator ${CMAKE_GENERATOR}
  64. --build-generator-platform "${CMAKE_GENERATOR_PLATFORM}"
  65. --build-generator-toolset "${CMAKE_GENERATOR_TOOLSET}"
  66. --build-options -C${ExportImport_BINARY_DIR}/InitialCache.cmake
  67. VERBATIM
  68. )
  69. add_custom_target(ImportTarget ALL DEPENDS ${ExportImport_BINARY_DIR}/ImportProject)
  70. add_dependencies(ImportTarget ExportTarget)
  71. set_property(
  72. SOURCE ${ExportImport_BINARY_DIR}/ImportProject
  73. PROPERTY SYMBOLIC 1
  74. )
  75. add_executable(ExportImport main.c)
  76. add_dependencies(ExportImport ImportTarget)