idlfilehelper.cmake 1.2 KB

1234567891011121314151617181920212223242526272829
  1. # target_add_idl_files: Compile IDL file and add generated source files to target
  2. function(target_add_idl_files target)
  3. set(options target WITH_TLB)
  4. set(oneValueArgs "")
  5. set(multiValueArgs "")
  6. cmake_parse_arguments(PARSE_ARGV 1 _AIF "${options}" "${oneValueArgs}" "${multiValueArgs}")
  7. set(aif_files ${_AIF_UNPARSED_ARGUMENTS})
  8. foreach(idl_file IN LISTS aif_files)
  9. cmake_path(GET idl_file STEM idl_file_name)
  10. cmake_path(GET idl_file PARENT_PATH idl_file_path)
  11. set(idl_file_header "${CMAKE_CURRENT_BINARY_DIR}/${idl_file_name}.h")
  12. set(idl_file_source "${CMAKE_CURRENT_BINARY_DIR}/${idl_file_name}_i.c")
  13. add_custom_command(
  14. OUTPUT "${idl_file_header}" "${idl_file_source}"
  15. DEPENDS "${idl_file}"
  16. COMMAND
  17. midl /h "${idl_file_name}.h" /iid "${idl_file_name}_i.c" "$<$<NOT:$<BOOL:${_AIF_WITH_TLIB}>>:/notlb>" /win64
  18. "${CMAKE_CURRENT_SOURCE_DIR}/${idl_file}"
  19. WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
  20. COMMENT "Generate idl files"
  21. )
  22. set_source_files_properties(${idl_file} PROPERTIES HEADER_FILE_ONLY TRUE)
  23. target_sources(${target} PRIVATE "${idl_file_source}" "${idl_file_header}")
  24. endforeach()
  25. endfunction()