Generate.cmake 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #[[
  2. Warning: This module is private, may be modified or removed in the future, please use with caution.
  3. ]] #
  4. include_guard(DIRECTORY)
  5. #[[
  6. Create the names of output files preserving relative dirs. (Ported from MOC command)
  7. qm_make_output_file(<infile> <prefix> <ext> <OUT>)
  8. OUT: output source file paths
  9. #]]
  10. function(qm_make_output_file _infile _prefix _ext _out)
  11. string(LENGTH ${CMAKE_CURRENT_BINARY_DIR} _binlength)
  12. string(LENGTH ${_infile} _infileLength)
  13. set(_checkinfile ${CMAKE_CURRENT_SOURCE_DIR})
  14. if(_infileLength GREATER _binlength)
  15. string(SUBSTRING "${_infile}" 0 ${_binlength} _checkinfile)
  16. if(_checkinfile STREQUAL "${CMAKE_CURRENT_BINARY_DIR}")
  17. file(RELATIVE_PATH _rel ${CMAKE_CURRENT_BINARY_DIR} ${_infile})
  18. else()
  19. file(RELATIVE_PATH _rel ${CMAKE_CURRENT_SOURCE_DIR} ${_infile})
  20. endif()
  21. else()
  22. file(RELATIVE_PATH _rel ${CMAKE_CURRENT_SOURCE_DIR} ${_infile})
  23. endif()
  24. if(CMAKE_HOST_WIN32 AND _rel MATCHES "^([a-zA-Z]):(.*)$") # absolute path
  25. set(_rel "${CMAKE_MATCH_1}_${CMAKE_MATCH_2}")
  26. endif()
  27. set(_outfile "${CMAKE_CURRENT_BINARY_DIR}/${_rel}")
  28. string(REPLACE ".." "__" _outfile ${_outfile})
  29. get_filename_component(_outpath ${_outfile} PATH)
  30. get_filename_component(_outfile ${_outfile} NAME_WLE)
  31. file(MAKE_DIRECTORY ${_outpath})
  32. set(${_out} ${_outpath}/${_prefix}${_outfile}.${_ext} PARENT_SCOPE)
  33. endfunction()