Hi,
I've just pushed some stuff to the frameworks branch for building Qt
frameworks with CMake. It is not KDE specific. It's just some generalized
stuff from Grantlee.
If I then use this patch to the itemmodels framework:
diff --git a/tier1/itemmodels/CMakeLists.txt
b/tier1/itemmodels/CMakeLists.txt
index 0c30f77..206a745 100644
--- a/tier1/itemmodels/CMakeLists.txt
+++ b/tier1/itemmodels/CMakeLists.txt
@@ -1,9 +1,22 @@
+cmake_minimum_required(VERSION 2.8)
+
project(itemmodels)
-include_directories(
- ${QT_INCLUDES}
- ${CMAKE_CURRENT_BINARY_DIR}
-)
+find_package(extra-cmake-modules REQUIRED)
+
+set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
${EXTRA_CMAKE_MODULES_MODULE_PATH})
+
+include(ECMVersion)
+
+# -- Maintained by scripty
+ecm_version(5 0 0)
+# --
+
+include(ECMQtFramework)
+
+find_package(Qt4 REQUIRED QtCore QtGui)
+
+include(${QT_USE_FILE})
include(FeatureSummary)
diff --git a/tier1/itemmodels/src/CMakeLists.txt
b/tier1/itemmodels/src/CMakeLists.txt
index 32366d2..7b2e8a1 100644
--- a/tier1/itemmodels/src/CMakeLists.txt
+++ b/tier1/itemmodels/src/CMakeLists.txt
@@ -11,17 +11,18 @@ set(itemmodels_SRCS
kviewstatemaintainerbase.cpp
)
-kf5_add_library(itemmodels ${LIBRARY_TYPE} ${itemmodels_SRCS})
+add_library(itemmodels ${LIBRARY_TYPE} ${itemmodels_SRCS})
+generate_export_header(itemmodels)
target_link_libraries(itemmodels ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY})
-set_target_properties(itemmodels PROPERTIES VERSION
${GENERIC_LIB_VERSION}
- SOVERSION
${GENERIC_LIB_SOVERSION}
+set_target_properties(itemmodels PROPERTIES VERSION ${ECM_VERSION_STRING}
+ SOVERSION ${ECM_SOVERSION}
)
-install(TARGETS itemmodels EXPORT kdelibsLibraryTargets
${INSTALL_TARGETS_DEFAULT_ARGS})
+install(TARGETS itemmodels ${ECM_TARGET_DEFAULT_ARGS})
-install( FILES
+install(FILES
kbreadcrumbselectionmodel.h
kcheckableproxymodel.h
klinkitemselectionmodel.h
@@ -35,4 +36,3 @@ install( FILES
${CMAKE_CURRENT_BINARY_DIR}/itemmodels_export.h
DESTINATION ${INCLUDE_INSTALL_DIR} COMPONENT Devel
)
-
And then when I install I get this:
-- Install configuration: "debug"
-- Installing: /home/kde-
devel/dev/qt47/kde46/lib/cmake/itemmodels/itemmodelsConfig.cmake
-- Installing: /home/kde-
devel/dev/qt47/kde46/lib/cmake/itemmodels/itemmodelsConfigVersion.cmake
-- Old export file "/home/kde-
devel/dev/qt47/kde46/lib/cmake/itemmodels/itemmodelsTargets.cmake" will be
replaced. Removing files [/home/kde-
devel/dev/qt47/kde46/lib/cmake/itemmodels/itemmodelsTargets-debug.cmake].
-- Installing: /home/kde-
devel/dev/qt47/kde46/lib/cmake/itemmodels/itemmodelsTargets.cmake
-- Installing: /home/kde-
devel/dev/qt47/kde46/lib/cmake/itemmodels/itemmodelsTargets-debug.cmake
-- Installing: /home/kde-
devel/dev/qt47/kde46/lib/cmake/itemmodels/itemmodelsUse.cmake
-- Installing: /home/kde-devel/dev/qt47/kde46/lib/libitemmodels.so.5.0.0
-- Up-to-date: /home/kde-devel/dev/qt47/kde46/lib/libitemmodels.so.5
-- Up-to-date: /home/kde-devel/dev/qt47/kde46/lib/libitemmodels.so
-- Set runtime path of "/home/kde-
devel/dev/qt47/kde46/lib/libitemmodels.so.5.0.0" to "/home/kde-
devel/dev/qt47/lib"
-- Up-to-date: /home/kde-
devel/dev/qt47/kde46/include/kbreadcrumbselectionmodel.h
-- Up-to-date: /home/kde-devel/dev/qt47/kde46/include/kcheckableproxymodel.h
-- Up-to-date: /home/kde-
devel/dev/qt47/kde46/include/klinkitemselectionmodel.h
-- Up-to-date: /home/kde-
devel/dev/qt47/kde46/include/krecursivefilterproxymodel.h
-- Up-to-date: /home/kde-
devel/dev/qt47/kde46/include/kdescendantsproxymodel.h
-- Up-to-date: /home/kde-devel/dev/qt47/kde46/include/kidentityproxymodel.h
-- Up-to-date: /home/kde-devel/dev/qt47/kde46/include/kviewstateserializer.h
-- Up-to-date: /home/kde-
devel/dev/qt47/kde46/include/kviewstatemaintainerbase.h
-- Up-to-date: /home/kde-
devel/dev/qt47/kde46/include/kmodelindexproxymapper.h
-- Up-to-date: /home/kde-devel/dev/qt47/kde46/include/kselectionproxymodel.h
-- Installing: /home/kde-devel/dev/qt47/kde46/include/itemmodels_export.h
Note that:
* I don't need to include CMAKE_CURRENT_BINARY_DIR. The ECMQtFramework file
sets CMAKE_INCLUDE_CURRENT_DIR so we don't have to.
* I'm not using kf5_add_library, but just add_library. That means that I
don't have ENABLE_FINAL anymore and the LINK_INTERFACE list is not cleared.
If those things are important ECM or CMake should get support for them in
some form.
* I didn't have to do anything to get Config, ConfigVersion, Targets and USE
files. The ECMQtFramework file takes care of that.
I can then use itemmodels like this:
cmake_minimum_required(VERSION 2.8)
project(radiobuttonlistmodel)
find_package(itemmodels REQUIRED)
include(${itemmodels_USE_FILE})
add_executable(radiobuttonlistmodel main.cpp rbm.cpp)
target_link_libraries(radiobuttonlistmodel ${itemmodels_LIBRARY})
Easy?
What do you think? Is this something we should make standard in frameworks?
Note to try this out you need this patch:
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=7bf2c1aa3ecd4921a19391cd9b37d78045a6e65d
Thanks,
Steve.
_______________________________________________
Kde-buildsystem mailing list
[email protected]
https://mail.kde.org/mailman/listinfo/kde-buildsystem