diff --git a/CMakeLists.txt b/CMakeLists.txt
index 0492899da47..613ca453edb 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -581,8 +581,6 @@ ELSE (WIN32)
 
 ENDIF(WIN32)
 
-ADD_DEFINITIONS("-DCUSTOMWIDGETS_EXPORT=${DLLIMPORT}")
-
 SET(CMAKE_CXX_VISIBILITY_PRESET hidden)
 INCLUDE(GenerateExportHeader)
 
diff --git a/src/customwidgets/CMakeLists.txt b/src/customwidgets/CMakeLists.txt
index 56e5e5d1ffb..1f72236dab6 100644
--- a/src/customwidgets/CMakeLists.txt
+++ b/src/customwidgets/CMakeLists.txt
@@ -7,10 +7,6 @@ FIND_PACKAGE(Qt5Designer REQUIRED)
 
 SET(QT_USE_QTDESIGNER ON)
 
-
-REMOVE_DEFINITIONS("-DCUSTOMWIDGETS_EXPORT=${DLLIMPORT}")
-ADD_DEFINITIONS("\"-DCUSTOMWIDGETS_EXPORT=${DLLEXPORT}\"")
-
 ########################################################
 # Files
 
@@ -107,6 +103,7 @@ INCLUDE_DIRECTORIES(
   ${CMAKE_CURRENT_SOURCE_DIR}/../gui/editorwidgets/
   ${CMAKE_CURRENT_SOURCE_DIR}/../gui/editorwidgets/core
   ${CMAKE_BINARY_DIR}/src/core
+  ${CMAKE_BINARY_DIR}/src/customwidgets
   ${CMAKE_CURRENT_BINARY_DIR}/../ui/
 )
 INCLUDE_DIRECTORIES(SYSTEM
@@ -126,9 +123,6 @@ QT5_ADD_RESOURCES(IMAGE_RCC_SRCS ${IMAGE_RCCS})
 
 ADD_LIBRARY(qgis_customwidgets SHARED ${QGIS_CUSTOMWIDGETS_SRCS} ${QGIS_CUSTOMWIDGETS_MOC_SRCS} ${QGIS_CUSTOMWIDGETS_HDRS} ${IMAGE_RCC_SRCS})
 
-# TODO: apple
-INSTALL(FILES ${QGIS_CUSTOMWIDGETS_HDRS} DESTINATION ${QGIS_INCLUDE_DIR})
-
 SET_TARGET_PROPERTIES(qgis_customwidgets PROPERTIES
   VERSION ${COMPLETE_VERSION}
   SOVERSION ${COMPLETE_VERSION}
@@ -139,8 +133,19 @@ ADD_DEPENDENCIES(qgis_customwidgets ui)
 
 TARGET_LINK_LIBRARIES(qgis_customwidgets qgis_gui)
 
+GENERATE_EXPORT_HEADER(
+   qgis_customwidgets
+   BASE_NAME CUSTOMWIDGETS
+   EXPORT_FILE_NAME qgis_customwidgets.h
+)
+
+SET(QGIS_CUSTOMWIDGETS_HDRS ${QGIS_CUSTOMWIDGETS_HDRS} ${PROJECT_BINARY_DIR}/qgis_customwidgets.h)
+
 # install
 INSTALL(TARGETS qgis_customwidgets
   RUNTIME DESTINATION ${QT_PLUGINS_DIR}/designer
   LIBRARY DESTINATION ${QT_PLUGINS_DIR}/designer
 )
+
+# TODO: apple
+INSTALL(FILES ${QGIS_CUSTOMWIDGETS_HDRS} DESTINATION ${QGIS_INCLUDE_DIR})
diff --git a/src/customwidgets/qgscollapsiblegroupboxplugin.h b/src/customwidgets/qgscollapsiblegroupboxplugin.h
index 31b751af837..a7ea82f1b3b 100644
--- a/src/customwidgets/qgscollapsiblegroupboxplugin.h
+++ b/src/customwidgets/qgscollapsiblegroupboxplugin.h
@@ -24,6 +24,7 @@
 #else
 #include <QtUiPlugin/QDesignerCustomWidgetInterface>
 #include <QtUiPlugin/QDesignerExportWidget>
+#include "qgis_customwidgets.h"
 #endif
 
 class CUSTOMWIDGETS_EXPORT QgsCollapsibleGroupBoxPlugin : public QObject, public QDesignerCustomWidgetInterface
diff --git a/src/customwidgets/qgscolorbuttonplugin.h b/src/customwidgets/qgscolorbuttonplugin.h
index cdb713cc35e..d44e9186a8d 100644
--- a/src/customwidgets/qgscolorbuttonplugin.h
+++ b/src/customwidgets/qgscolorbuttonplugin.h
@@ -24,6 +24,7 @@
 #else
 #include <QtUiPlugin/QDesignerCustomWidgetInterface>
 #include <QtUiPlugin/QDesignerExportWidget>
+#include "qgis_customwidgets.h"
 #endif
 
 
diff --git a/src/customwidgets/qgsdatadefinedbuttonplugin.h b/src/customwidgets/qgsdatadefinedbuttonplugin.h
index 9ba4eb6c1ae..237396d9b9e 100644
--- a/src/customwidgets/qgsdatadefinedbuttonplugin.h
+++ b/src/customwidgets/qgsdatadefinedbuttonplugin.h
@@ -24,6 +24,7 @@
 #else
 #include <QtUiPlugin/QDesignerCustomWidgetInterface>
 #include <QtUiPlugin/QDesignerExportWidget>
+#include "qgis_customwidgets.h"
 #endif
 
 
diff --git a/src/customwidgets/qgsdatetimeeditplugin.h b/src/customwidgets/qgsdatetimeeditplugin.h
index 67440adf919..b9a3fbd51aa 100644
--- a/src/customwidgets/qgsdatetimeeditplugin.h
+++ b/src/customwidgets/qgsdatetimeeditplugin.h
@@ -24,6 +24,7 @@
 #else
 #include <QtUiPlugin/QDesignerCustomWidgetInterface>
 #include <QtUiPlugin/QDesignerExportWidget>
+#include "qgis_customwidgets.h"
 #endif
 
 
diff --git a/src/customwidgets/qgsdockwidgetplugin.h b/src/customwidgets/qgsdockwidgetplugin.h
index 5d4997a1e0a..cc1aa452b80 100644
--- a/src/customwidgets/qgsdockwidgetplugin.h
+++ b/src/customwidgets/qgsdockwidgetplugin.h
@@ -24,6 +24,7 @@
 #else
 #include <QtUiPlugin/QDesignerCustomWidgetInterface>
 #include <QtUiPlugin/QDesignerExportWidget>
+#include "qgis_customwidgets.h"
 #endif
 
 class CUSTOMWIDGETS_EXPORT QgsDockWidgetPlugin : public QObject, public QDesignerCustomWidgetInterface
diff --git a/src/customwidgets/qgsdoublespinboxplugin.h b/src/customwidgets/qgsdoublespinboxplugin.h
index 58c0ac86f77..c26cd0ccac0 100644
--- a/src/customwidgets/qgsdoublespinboxplugin.h
+++ b/src/customwidgets/qgsdoublespinboxplugin.h
@@ -24,6 +24,7 @@
 #else
 #include <QtUiPlugin/QDesignerCustomWidgetInterface>
 #include <QtUiPlugin/QDesignerExportWidget>
+#include "qgis_customwidgets.h"
 #endif
 
 
diff --git a/src/customwidgets/qgsexpressionbuilderwidgetplugin.h b/src/customwidgets/qgsexpressionbuilderwidgetplugin.h
index 68670265af8..61a43edd17a 100644
--- a/src/customwidgets/qgsexpressionbuilderwidgetplugin.h
+++ b/src/customwidgets/qgsexpressionbuilderwidgetplugin.h
@@ -24,6 +24,7 @@
 #else
 #include <QtUiPlugin/QDesignerCustomWidgetInterface>
 #include <QtUiPlugin/QDesignerExportWidget>
+#include "qgis_customwidgets.h"
 #endif
 
 
diff --git a/src/customwidgets/qgsextentgroupboxplugin.h b/src/customwidgets/qgsextentgroupboxplugin.h
index f3167d963fb..cf6cbf3cde0 100644
--- a/src/customwidgets/qgsextentgroupboxplugin.h
+++ b/src/customwidgets/qgsextentgroupboxplugin.h
@@ -24,6 +24,7 @@
 #else
 #include <QtUiPlugin/QDesignerCustomWidgetInterface>
 #include <QtUiPlugin/QDesignerExportWidget>
+#include "qgis_customwidgets.h"
 #endif
 
 
diff --git a/src/customwidgets/qgsexternalresourcewidgetplugin.h b/src/customwidgets/qgsexternalresourcewidgetplugin.h
index ae782cdc485..e5b472679f9 100644
--- a/src/customwidgets/qgsexternalresourcewidgetplugin.h
+++ b/src/customwidgets/qgsexternalresourcewidgetplugin.h
@@ -24,6 +24,7 @@
 #else
 #include <QtUiPlugin/QDesignerCustomWidgetInterface>
 #include <QtUiPlugin/QDesignerExportWidget>
+#include "qgis_customwidgets.h"
 #endif
 
 
diff --git a/src/customwidgets/qgsfieldcomboboxplugin.h b/src/customwidgets/qgsfieldcomboboxplugin.h
index 3d671ec8539..2a99b08fef5 100644
--- a/src/customwidgets/qgsfieldcomboboxplugin.h
+++ b/src/customwidgets/qgsfieldcomboboxplugin.h
@@ -24,6 +24,7 @@
 #else
 #include <QtUiPlugin/QDesignerCustomWidgetInterface>
 #include <QtUiPlugin/QDesignerExportWidget>
+#include "qgis_customwidgets.h"
 #endif
 
 
diff --git a/src/customwidgets/qgsfieldexpressionwidgetplugin.h b/src/customwidgets/qgsfieldexpressionwidgetplugin.h
index f09927d667c..7dbcfba952a 100644
--- a/src/customwidgets/qgsfieldexpressionwidgetplugin.h
+++ b/src/customwidgets/qgsfieldexpressionwidgetplugin.h
@@ -24,6 +24,7 @@
 #else
 #include <QtUiPlugin/QDesignerCustomWidgetInterface>
 #include <QtUiPlugin/QDesignerExportWidget>
+#include "qgis_customwidgets.h"
 #endif
 
 
diff --git a/src/customwidgets/qgsfilewidgetplugin.h b/src/customwidgets/qgsfilewidgetplugin.h
index 9757eda1911..d4c251af2e8 100644
--- a/src/customwidgets/qgsfilewidgetplugin.h
+++ b/src/customwidgets/qgsfilewidgetplugin.h
@@ -24,6 +24,7 @@
 #else
 #include <QtUiPlugin/QDesignerCustomWidgetInterface>
 #include <QtUiPlugin/QDesignerExportWidget>
+#include "qgis_customwidgets.h"
 #endif
 
 
diff --git a/src/customwidgets/qgsfilterlineeditplugin.h b/src/customwidgets/qgsfilterlineeditplugin.h
index d8fe6cb4e3c..1d49cea0c7f 100644
--- a/src/customwidgets/qgsfilterlineeditplugin.h
+++ b/src/customwidgets/qgsfilterlineeditplugin.h
@@ -24,6 +24,7 @@
 #else
 #include <QtUiPlugin/QDesignerCustomWidgetInterface>
 #include <QtUiPlugin/QDesignerExportWidget>
+#include "qgis_customwidgets.h"
 #endif
 
 
diff --git a/src/customwidgets/qgsmaplayercomboboxplugin.h b/src/customwidgets/qgsmaplayercomboboxplugin.h
index c63a5689f2e..35a6873541f 100644
--- a/src/customwidgets/qgsmaplayercomboboxplugin.h
+++ b/src/customwidgets/qgsmaplayercomboboxplugin.h
@@ -24,6 +24,7 @@
 #else
 #include <QtUiPlugin/QDesignerCustomWidgetInterface>
 #include <QtUiPlugin/QDesignerExportWidget>
+#include "qgis_customwidgets.h"
 #endif
 
 
diff --git a/src/customwidgets/qgsprojectionselectionwidgetplugin.h b/src/customwidgets/qgsprojectionselectionwidgetplugin.h
index f340b1560bd..63c3ae91783 100644
--- a/src/customwidgets/qgsprojectionselectionwidgetplugin.h
+++ b/src/customwidgets/qgsprojectionselectionwidgetplugin.h
@@ -24,6 +24,7 @@
 #else
 #include <QtUiPlugin/QDesignerCustomWidgetInterface>
 #include <QtUiPlugin/QDesignerExportWidget>
+#include "qgis_customwidgets.h"
 #endif
 
 
diff --git a/src/customwidgets/qgsrelationeditorwidgetplugin.h b/src/customwidgets/qgsrelationeditorwidgetplugin.h
index 101e007c10a..30c11543496 100644
--- a/src/customwidgets/qgsrelationeditorwidgetplugin.h
+++ b/src/customwidgets/qgsrelationeditorwidgetplugin.h
@@ -24,6 +24,7 @@
 #else
 #include <QtUiPlugin/QDesignerCustomWidgetInterface>
 #include <QtUiPlugin/QDesignerExportWidget>
+#include "qgis_customwidgets.h"
 #endif
 
 
diff --git a/src/customwidgets/qgsrelationreferencewidgetplugin.h b/src/customwidgets/qgsrelationreferencewidgetplugin.h
index 3dc4cd69837..bfe3867ec05 100644
--- a/src/customwidgets/qgsrelationreferencewidgetplugin.h
+++ b/src/customwidgets/qgsrelationreferencewidgetplugin.h
@@ -24,6 +24,7 @@
 #else
 #include <QtUiPlugin/QDesignerCustomWidgetInterface>
 #include <QtUiPlugin/QDesignerExportWidget>
+#include "qgis_customwidgets.h"
 #endif
 
 
diff --git a/src/customwidgets/qgsscalerangewidgetplugin.h b/src/customwidgets/qgsscalerangewidgetplugin.h
index a22c2d4bbc6..84aa45fa18d 100644
--- a/src/customwidgets/qgsscalerangewidgetplugin.h
+++ b/src/customwidgets/qgsscalerangewidgetplugin.h
@@ -24,6 +24,7 @@
 #else
 #include <QtUiPlugin/QDesignerCustomWidgetInterface>
 #include <QtUiPlugin/QDesignerExportWidget>
+#include "qgis_customwidgets.h"
 #endif
 
 
diff --git a/src/customwidgets/qgsscalewidgetplugin.h b/src/customwidgets/qgsscalewidgetplugin.h
index 19afb7de9ea..1fb399494f5 100644
--- a/src/customwidgets/qgsscalewidgetplugin.h
+++ b/src/customwidgets/qgsscalewidgetplugin.h
@@ -24,6 +24,7 @@
 #else
 #include <QtUiPlugin/QDesignerCustomWidgetInterface>
 #include <QtUiPlugin/QDesignerExportWidget>
+#include "qgis_customwidgets.h"
 #endif
 
 
diff --git a/src/customwidgets/qgsspinboxplugin.h b/src/customwidgets/qgsspinboxplugin.h
index 0099342c2b9..68a8ecea6f6 100644
--- a/src/customwidgets/qgsspinboxplugin.h
+++ b/src/customwidgets/qgsspinboxplugin.h
@@ -23,6 +23,7 @@
 #else
 #include <QtUiPlugin/QDesignerCustomWidgetInterface>
 #include <QtUiPlugin/QDesignerExportWidget>
+#include "qgis_customwidgets.h"
 #endif