CMakeLists.txt 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. cmake_minimum_required(VERSION 2.8)
  2. project(LinkDirectory C)
  3. # Put the subproject source tree in our build tree so it can refer to
  4. # link directories relative to its source.
  5. if(NOT "${LinkDirectory_SOURCE_DIR}" STREQUAL "${LinkDirectory_BINARY_DIR}")
  6. file(COPY External/ DESTINATION External PATTERN CVS EXCLUDE)
  7. endif()
  8. # Build a library into the subproject source tree.
  9. add_library(mylibA STATIC mylibA.c)
  10. set_property(TARGET mylibA PROPERTY
  11. ARCHIVE_OUTPUT_DIRECTORY "${LinkDirectory_BINARY_DIR}/External/lib")
  12. get_property(mylibA TARGET mylibA PROPERTY LOCATION)
  13. # Build a library into our build tree relative to the subproject build tree.
  14. add_library(mylibB STATIC mylibB.c)
  15. set_property(TARGET mylibB PROPERTY
  16. ARCHIVE_OUTPUT_DIRECTORY "${LinkDirectory_BINARY_DIR}/lib")
  17. get_property(mylibB TARGET mylibB PROPERTY LOCATION)
  18. # Create a custom target to drive the subproject build.
  19. include(ExternalProject)
  20. ExternalProject_Add(ExternalTarget
  21. SOURCE_DIR "${LinkDirectory_BINARY_DIR}/External"
  22. BINARY_DIR "${LinkDirectory_BINARY_DIR}/External-build"
  23. CMAKE_ARGS "-DCMAKE_RUNTIME_OUTPUT_DIRECTORY=${LinkDirectory_BINARY_DIR}/bin"
  24. PREFIX "${LinkDirectory_BINARY_DIR}/External-build/root"
  25. DOWNLOAD_COMMAND ""
  26. INSTALL_COMMAND ""
  27. )
  28. # Add a step to wipe out the subproject executable after our libraries
  29. # change. This is needed because the subproject cannot depend on them
  30. # directly because it does not know the full paths to the libraries.
  31. # (The purpose of this test is to check that link_directories works.)
  32. ExternalProject_Add_Step(ExternalTarget cleanup
  33. COMMAND ${CMAKE_COMMAND} -E remove_directory ${LinkDirectory_BINARY_DIR}/bin
  34. DEPENDEES download
  35. DEPENDERS configure
  36. DEPENDS ${mylibA} ${mylibB}
  37. "${LinkDirectory_BINARY_DIR}/External/CMakeLists.txt"
  38. "${LinkDirectory_BINARY_DIR}/External/myexe.c"
  39. )
  40. # Make the subproject build after our targets.
  41. add_dependencies(ExternalTarget mylibA mylibB)