[CMake] Transfer Kdevelop-managed project to cmake with .ui files and generated ui_*.h

junior0007 junior0007 at web.de
Tue Sep 11 04:12:02 EDT 2007


Hey Guys,

I have a nice little project running (so far) under Kdevelop that
contains some .ui-files. So far these ui-files are compiled using uic (i
guess... - it's autom. done by Kdevelop...) so that the result is an
ui_*.h file. This ui_*.h File is then included by the classes.

So far i already found some nice help browsing this list and so i might
be on the right way. However i still have linking-probs maybe you can
help.

The Project tree looks like:
  > project
    > bin
    > src
      > gui
      > gui_ui
      > model

So far i just put a CMakeLists.txt into the project und project/src -
directory and startet with trial-and error - lots of errors

I already had a look at the list and found some things that should do
the work, but how?

Here is the src/CMakeLists.txt:

===================================================================
PROJECT (TOOLBOX)

SET (CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/Modules )
SET (VERSION 0.0.9)

# requires QT4 in this Project
find_package(Qt4 REQUIRED) # find and setup Qt4 for this project

# Run Qt UIC on a UI file.
# Arguments:
#    1-N   Names of .ui files
MACRO(AIS_UI)
   FOREACH (it ${ARGN})
      GET_FILENAME_COMPONENT(outfile ${it} NAME_WE)
      # changed next line --added ui_
      SET(outhfile ${CMAKE_CURRENT_BINARY_DIR}/ui_${outfile}.h)
      SET(outcppfile ${CMAKE_CURRENT_BINARY_DIR}/${outfile}_uic.cpp)
      ADD_CUSTOM_COMMAND(OUTPUT ${outhfile}
         COMMAND ${QT_UIC_EXECUTABLE} ARGS -o ${outhfile}
${CMAKE_CURRENT_SOURCE_DIR}/${it}
         WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
         MAIN_DEPENDENCY ${it}
         DEPENDS ${it}
      )
      ADD_CUSTOM_COMMAND(OUTPUT ${outcppfile}
         COMMAND ${QT_UIC_EXECUTABLE} ARGS
${CMAKE_CURRENT_SOURCE_DIR}/${it} -impl ${outhfile} -o ${outcppfile}
         WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
         MAIN_DEPENDENCY ${it}
         DEPENDS ${it} ${outhfile})
        SET(CPP_SOURCE ${CPP_SOURCE} ${outcppfile})
      AIS_MOC(${outhfile})

      SET(AIS_UIC_SOURCES ${AIS_UIC_SOURCES} ${outcppfile})
      LIST(APPEND AIS_UIC_HEADERS ${outhfile})
   ENDFOREACH (it)
ENDMACRO(AIS_UI)

# Run Qt MOC on a C++ header file.
# Arguments:
#    1-N   Names of headerfiles
MACRO(AIS_MOC)
   FOREACH (it ${ARGN})
      # Make .h filename absolute
      GET_FILENAME_COMPONENT(infile ${it} ABSOLUTE)

      # Build x_moc.cpp filename
      GET_FILENAME_COMPONENT(outfile ${it} NAME_WE)
      SET(outfile ${CMAKE_CURRENT_BINARY_DIR}/${outfile}_moc.cpp)

      # Run MOC
      ADD_CUSTOM_COMMAND(OUTPUT ${outfile}
         COMMAND ${QT_MOC_EXECUTABLE}
            ARGS ${infile} -o ${outfile}
         WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
         DEPENDS ${infile}
         COMMENT MOCing ${it})
      LIST(APPEND CPP_SOURCE ${outfile})
      LIST(APPEND AIS_MOC_SOURCES ${outfile})
   ENDFOREACH(it)
ENDMACRO(AIS_MOC)


# don't know for what but works ;-)
include(${QT_USE_FILE})
include_directories(${CMAKE_CURRENT_BINARY_DIR})

# all QT_Designer Files
SET(GUI_SRCS gui_ui/conprefswidget.ui [..] )

AIS_UI(${GUI_SRCS})

# all files that contain a Q_OBJECT REFERENCE
SET (MOC_HDRS main.cpp [..] )

SET (HDRS Tools.h [..] )
SET (SRCS Tools.cpp [..] )


INCLUDE_DIRECTORIES(
	.
	${QT_INCLUDE_DIR}
	${QT_QT_INCLUDE_DIR}
	${QT_QTGUI_INCLUDE_DIR}
)

SET(EXECUTABLE_OUTPUT_PATH build/)

ADD_EXECUTABLE(Toolbox ${SRCS} ${HDRS} ${UIC_HDRS} ${MOC_HDRS})

TARGET_LINK_LIBRARIES (Toolbox ${QT_LIBRARIES})
=======================================================================

Works nice until linking... Linking causes: undefined reference to
`vtable for [...]

Can anybody help?


Cheers
junior





More information about the CMake mailing list