How to create libraries in KDE Frameworks 5

Stephen Kelly steveire at gmail.com
Mon Aug 8 16:44:36 BST 2011


Hi,

I've just pushed an update to the frameworks branch in kdelibs.git. I moved 
some classes from kdeui/itemviews to tier1/itemmodels/ and added them to the 
buildsystem in a library.

Just for the need of starting somewhere I created a top-level directory 
called tier1 to hold the library. As with all of this stuff we may have to 
refine how it's all organized as we go on.

One important difference to how things have been done before is that an 
export header is generated by cmake now instead of requiring the creation of 
a <libname>_export.h header which uses kdemacros.h.

Instead, the export header is created by the cmake macro 
kdelibs/cmake/modules/GenerateExportHeader.cmake. This macro will be part of 
cmake 2.8.6. 

After using kde4_add_library the macro generate_export_header should be 
used.

kde4_add_library(itemmodels ...)
generate_export_header(itemmodels
  DEPRECATED_NAME KDE_DEPRECATED
)

Obviously this should be part of kde4_add_library itself, but that failed to 
build for me when building kparts or kio (iirc) because kde4_add_library 
seems to be used for more than just libraries. I'll revisit that later.

The itemmodels_export.h file is created in the build directory instead of 
being checked in. That means that it must be installed with a referenece to 
the build dir, like 

install(FILES 
  ${CMAKE_CURRENT_BUILD_DIR}/itemmodels_export.h
)

Another important change is that I added the itemmodels library to the 
${KDE4_KDEUI_LIBS} variable. I also added some typedefs for classes which I 
refactored and renamed.

Thanks for reading. Please read the commits to see the details, including 
how I removed a KConfig dependency while keeping source compatibility (I 
think). Obviously we're not going to achieve 100% compatibility as we go on, 
but it's worth making early effort I think.

All the best,

Steve.






More information about the kde-core-devel mailing list