--- /dev/null
+diff --git a/CMake/itkOpenCL.cmake b/CMake/itkOpenCL.cmake
+index 0ccbe144d..fa381524f 100644
+--- a/CMake/itkOpenCL.cmake
++++ b/CMake/itkOpenCL.cmake
+@@ -48,7 +48,7 @@ if(ITK_USE_GPU)
+ )
+ set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_FILE}
+ PROPERTIES GENERATED ON)
+- set(${SRC_VAR} ${${SRC_VAR}} ${OUTPUT_FILE})
++ set(${SRC_VAR} ${${SRC_VAR}} ${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_FILE})
+ endmacro()
+
+ macro(write_gpu_kernels GPUKernels GPU_SRC)
+diff --git a/Modules/Core/Common/include/itkMacro.h b/Modules/Core/Common/include/itkMacro.h
+index 1816f722a..3a6a8aee5 100644
+--- a/Modules/Core/Common/include/itkMacro.h
++++ b/Modules/Core/Common/include/itkMacro.h
+@@ -1141,7 +1141,7 @@ compilers.
+ #define itkGetVectorMacro(name, type, count) \
+ virtual type * Get##name() const { return this->m_##name; }
+
+-/**\def itkGPUKernelClassMacro
++/**\def class itkGPUKernelClassMacro
+ * Construct a non-templatized helper class that
+ * provides the GPU kernel source code as a const char*
+ */
+@@ -1150,7 +1150,7 @@ compilers.
+ * Workaround KWstyle bug \ \
+ * \ingroup ITKCommon \ \
+ */ \
+- class kernel \
++ kernel \
+ { \
+ public: \
+ static const char * \
+diff --git a/Modules/Core/GPUCommon/include/itkGPUImageOps.h b/Modules/Core/GPUCommon/include/itkGPUImageOps.h
+index f4eb8f33b..fbdf3d757 100644
+--- a/Modules/Core/GPUCommon/include/itkGPUImageOps.h
++++ b/Modules/Core/GPUCommon/include/itkGPUImageOps.h
+@@ -23,7 +23,7 @@
+ namespace itk
+ {
+ /** Create a helper GPU Kernel class for GPUImageOps */
+-itkGPUKernelClassMacro(GPUImageOpsKernel);
++class itkGPUKernelClassMacro(GPUImageOpsKernel);
+
+ /** \class GPUImageOps
+ *
+diff --git a/Modules/Core/GPUCommon/include/itkGPUReduction.h b/Modules/Core/GPUCommon/include/itkGPUReduction.h
+index 524a5cd01..1b3ce91e9 100644
+--- a/Modules/Core/GPUCommon/include/itkGPUReduction.h
++++ b/Modules/Core/GPUCommon/include/itkGPUReduction.h
+@@ -26,7 +26,7 @@
+ namespace itk
+ {
+ /** Create a helper GPU Kernel class for GPUReduction */
+-itkGPUKernelClassMacro(GPUReductionKernel);
++class itkGPUKernelClassMacro(GPUReductionKernel);
+
+ /**
+ * \class GPUReduction
+diff --git a/Modules/Core/GPUFiniteDifference/include/itkGPUDenseFiniteDifferenceImageFilter.h b/Modules/Core/GPUFiniteDifference/include/itkGPUDenseFiniteDifferenceImageFilter.h
+index 853801cec..2fccf0bc5 100644
+--- a/Modules/Core/GPUFiniteDifference/include/itkGPUDenseFiniteDifferenceImageFilter.h
++++ b/Modules/Core/GPUFiniteDifference/include/itkGPUDenseFiniteDifferenceImageFilter.h
+@@ -24,7 +24,7 @@
+ namespace itk
+ {
+ /** Create a helper GPU Kernel class for GPUDenseFiniteDifferenceImageFilter */
+-itkGPUKernelClassMacro(GPUDenseFiniteDifferenceImageFilterKernel);
++class ITKGPUFiniteDifference_EXPORT itkGPUKernelClassMacro(GPUDenseFiniteDifferenceImageFilterKernel);
+
+ /**
+ * \class GPUDenseFiniteDifferenceImageFilter
+diff --git a/Modules/Filtering/GPUAnisotropicSmoothing/include/itkGPUGradientNDAnisotropicDiffusionFunction.h b/Modules/Filtering/GPUAnisotropicSmoothing/include/itkGPUGradientNDAnisotropicDiffusionFunction.h
+index 4245ff914..1b21b709e 100644
+--- a/Modules/Filtering/GPUAnisotropicSmoothing/include/itkGPUGradientNDAnisotropicDiffusionFunction.h
++++ b/Modules/Filtering/GPUAnisotropicSmoothing/include/itkGPUGradientNDAnisotropicDiffusionFunction.h
+@@ -54,7 +54,7 @@ namespace itk
+ */
+
+ /** Create a helper GPU Kernel class for GPUGradientNDAnisotropicDiffusionFunction */
+-itkGPUKernelClassMacro(GPUGradientNDAnisotropicDiffusionFunctionKernel);
++class itkGPUKernelClassMacro(GPUGradientNDAnisotropicDiffusionFunctionKernel);
+
+ template <typename TImage>
+ class ITK_TEMPLATE_EXPORT GPUGradientNDAnisotropicDiffusionFunction
+diff --git a/Modules/Filtering/GPUAnisotropicSmoothing/include/itkGPUScalarAnisotropicDiffusionFunction.h b/Modules/Filtering/GPUAnisotropicSmoothing/include/itkGPUScalarAnisotropicDiffusionFunction.h
+index 305f6490e..d0d433080 100644
+--- a/Modules/Filtering/GPUAnisotropicSmoothing/include/itkGPUScalarAnisotropicDiffusionFunction.h
++++ b/Modules/Filtering/GPUAnisotropicSmoothing/include/itkGPUScalarAnisotropicDiffusionFunction.h
+@@ -32,7 +32,7 @@ namespace itk
+ * */
+
+ /** Create a helper GPU Kernel class for GPUScalarAnisotropicDiffusionFunction */
+-itkGPUKernelClassMacro(GPUScalarAnisotropicDiffusionFunctionKernel);
++class itkGPUKernelClassMacro(GPUScalarAnisotropicDiffusionFunctionKernel);
+
+ template <typename TImage>
+ class ITK_TEMPLATE_EXPORT GPUScalarAnisotropicDiffusionFunction : public GPUAnisotropicDiffusionFunction<TImage>
+diff --git a/Modules/Filtering/GPUImageFilterBase/include/itkGPUCastImageFilter.h b/Modules/Filtering/GPUImageFilterBase/include/itkGPUCastImageFilter.h
+index 23530ac5c..e1b83f696 100644
+--- a/Modules/Filtering/GPUImageFilterBase/include/itkGPUCastImageFilter.h
++++ b/Modules/Filtering/GPUImageFilterBase/include/itkGPUCastImageFilter.h
+@@ -29,7 +29,7 @@ namespace itk
+ {
+
+ /** Create a helper GPU Kernel class for GPUCastImageFilter */
+-itkGPUKernelClassMacro(GPUCastImageFilterKernel);
++class itkGPUKernelClassMacro(GPUCastImageFilterKernel);
+
+ /** \class GPUCastImageFilter
+ * \brief GPU version of CastImageFilter.
+diff --git a/Modules/Filtering/GPUImageFilterBase/include/itkGPUNeighborhoodOperatorImageFilter.h b/Modules/Filtering/GPUImageFilterBase/include/itkGPUNeighborhoodOperatorImageFilter.h
+index c4adc2967..69aeac6db 100644
+--- a/Modules/Filtering/GPUImageFilterBase/include/itkGPUNeighborhoodOperatorImageFilter.h
++++ b/Modules/Filtering/GPUImageFilterBase/include/itkGPUNeighborhoodOperatorImageFilter.h
+@@ -41,7 +41,7 @@ namespace itk
+ */
+
+ /** Create a helper GPU Kernel class for GPUNeighborhoodOperatorImageFilter */
+-itkGPUKernelClassMacro(GPUNeighborhoodOperatorImageFilterKernel);
++class itkGPUKernelClassMacro(GPUNeighborhoodOperatorImageFilterKernel);
+
+ template <typename TInputImage,
+ typename TOutputImage,
+diff --git a/Modules/Filtering/GPUSmoothing/include/itkGPUMeanImageFilter.h b/Modules/Filtering/GPUSmoothing/include/itkGPUMeanImageFilter.h
+index 57bc3ebb7..4ff98c665 100644
+--- a/Modules/Filtering/GPUSmoothing/include/itkGPUMeanImageFilter.h
++++ b/Modules/Filtering/GPUSmoothing/include/itkGPUMeanImageFilter.h
+@@ -37,7 +37,7 @@ namespace itk
+ */
+
+ /** Create a helper GPU Kernel class for GPUMeanImageFilter */
+-itkGPUKernelClassMacro(GPUMeanImageFilterKernel);
++class itkGPUKernelClassMacro(GPUMeanImageFilterKernel);
+
+ template <typename TInputImage, typename TOutputImage>
+ class ITK_TEMPLATE_EXPORT GPUMeanImageFilter
+diff --git a/Modules/Filtering/GPUThresholding/include/itkGPUBinaryThresholdImageFilter.h b/Modules/Filtering/GPUThresholding/include/itkGPUBinaryThresholdImageFilter.h
+index 8d26dcfc5..613bc623f 100644
+--- a/Modules/Filtering/GPUThresholding/include/itkGPUBinaryThresholdImageFilter.h
++++ b/Modules/Filtering/GPUThresholding/include/itkGPUBinaryThresholdImageFilter.h
+@@ -85,7 +85,7 @@ private:
+ } // end of namespace Functor
+
+ /** Create a helper GPU Kernel class for GPUBinaryThresholdImageFilter */
+-itkGPUKernelClassMacro(GPUBinaryThresholdImageFilterKernel);
++class itkGPUKernelClassMacro(GPUBinaryThresholdImageFilterKernel);
+
+ /**
+ * \class GPUBinaryThresholdImageFilter
+diff --git a/Modules/Registration/GPUPDEDeformable/include/itkGPUDemonsRegistrationFunction.h b/Modules/Registration/GPUPDEDeformable/include/itkGPUDemonsRegistrationFunction.h
+index 28b21d592..0b46e27b8 100644
+--- a/Modules/Registration/GPUPDEDeformable/include/itkGPUDemonsRegistrationFunction.h
++++ b/Modules/Registration/GPUPDEDeformable/include/itkGPUDemonsRegistrationFunction.h
+@@ -51,7 +51,7 @@ namespace itk
+ * \ingroup ITKGPUPDEDeformableRegistration
+ */
+ /** Create a helper GPU Kernel class for GPUDemonsRegistrationFunction */
+-itkGPUKernelClassMacro(GPUDemonsRegistrationFunctionKernel);
++class itkGPUKernelClassMacro(GPUDemonsRegistrationFunctionKernel);
+
+ template <typename TFixedImage, typename TMovingImage, typename TDisplacementField>
+ class ITK_TEMPLATE_EXPORT GPUDemonsRegistrationFunction
+diff --git a/Modules/Registration/GPUPDEDeformable/include/itkGPUPDEDeformableRegistrationFilter.h b/Modules/Registration/GPUPDEDeformable/include/itkGPUPDEDeformableRegistrationFilter.h
+index 93ab975ec..0afd84871 100644
+--- a/Modules/Registration/GPUPDEDeformable/include/itkGPUPDEDeformableRegistrationFilter.h
++++ b/Modules/Registration/GPUPDEDeformable/include/itkGPUPDEDeformableRegistrationFilter.h
+@@ -73,7 +73,7 @@ namespace itk
+ */
+
+ /** Create a helper GPU Kernel class for GPUPDEDeformableRegistrationFilter */
+-itkGPUKernelClassMacro(GPUPDEDeformableRegistrationFilterKernel);
++class itkGPUKernelClassMacro(GPUPDEDeformableRegistrationFilterKernel);
+
+ template <typename TFixedImage,
+ typename TMovingImage,