- #add_custom_command(OUTPUT ${_gch_filename} COMMAND ${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1} ${_args} DEPENDS ${_header_filename})
- #get_target_property(_src_files ${_target_name} SOURCES)
- #set_source_files_properties(${_src_files} PROPERTIES COMPILE_FLAGS "-Winvalid-pch -fpch-preprocess" #OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${_gch_filename})
- #add_linkerflag(${_target_name} "${_gch_filename}")
-endmacro()
+ macro(add_pch _target_name _FILE)
+ set(_header_filename ${CMAKE_CURRENT_SOURCE_DIR}/${_FILE})
+ get_filename_component(_basename ${_FILE} NAME)
+ set(_gch_filename ${_basename}.gch)
+ _PCH_GET_COMPILE_FLAGS(${_target_name} _args ${_header_filename})
+
+ if(IS_CPP)
+ set(__lang CXX)
+ set(__compiler ${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1})
+ else()
+ set(__lang C)
+ set(__compiler ${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1})
+ endif()
+
+ add_custom_command(OUTPUT ${_gch_filename} COMMAND ${__compiler} ${_args} IMPLICIT_DEPENDS ${__lang} ${_header_filename})
+ get_target_property(_src_files ${_target_name} SOURCES)
+ foreach(_item in ${_src_files})
+ get_source_file_property(__src_lang ${_item} LANGUAGE)
+ if(__src_lang STREQUAL __lang)
+ set_source_files_properties(${_item} PROPERTIES COMPILE_FLAGS "-fpch-preprocess" OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${_gch_filename})
+ endif()
+ endforeach()
+ #set dependency checking : depends on precompiled header only whixh already depends on deeper header
+ set_target_properties(${_target_name} PROPERTIES IMPLICIT_DEPENDS_INCLUDE_TRANSFORM "\"${_basename}\"=;<${_basename}>=")
+ endmacro()
+else()
+ macro(add_pch _target_name _FILE)
+ endmacro()
+endif()