[CMake] restricting Qt include and library linking to 1 library/project

Pau Garcia i Quiles pgquiles at elpauer.org
Thu Dec 31 09:07:27 EST 2009


Hello,

Do find_package( Qt4 COMPONENTS ... ) from each subdir and use only
the components you need for each library.

Do not INCLUDE( ${QT_USE_FILE} ) in any case, just do an include_directories.

When linking, do not use the contain-all QT_LIBRARIES variable but the
individual library variables.

Assuming lib1 uses QtCore and QtNetwork:

find_package( Qt4 COMPONENTS QtCore QtNetwork REQUIRED )
include_directories( ${QT_QTCORE_INCLUDE_DIR} ${QT_QTNETWORK_INCLUDE_DIR} )
add_library( lib1 SHARED lib1_source1.cpp lib1_source2.cpp ... )
target_link_libraries( lib1 ${QT_QTCORE_LIBRARIES} ${QT_QTNETWORK_LIBRARIES} )

You'd do similar for lib2 and lib3 and the main CMakeLists.txt would
only contain something like:

project( blah )

add_directory( lib1 )
add_directory( lib2 )
add_directory( lib3 )

i. e. no find_package( Qt4 ...) in the main CMakeLists.txt [*]

[*] Actually you can do the find_package( Qt4 COMPONENTES
yourcomponents ) in the main CMakeLists.txt but then you need to
specify all the components required by all the directories below that
one in the hierarchy, which is more difficult to track.


On Thu, Dec 31, 2009 at 2:45 PM, Hicham Mouline <hicham at mouline.org> wrote:
> Hello,
>
> My toplevel CMakeLists.txt looks like:
>
> ----------------------------------------------------------------------------
> --------
> PROJECT(...)
>
> CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
>
> # Openmp
> FIND_PACKAGE(OpenMP)
> IF(OPENMP_FOUND)
>  SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
> ENDIF()
>
> # Boost
> FIND_PACKAGE(Boost)
> IF(Boost_FOUND)
>    INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS})
> ENDIF()
>
> # Qt
> FIND_PACKAGE(Qt4 4.6.0 COMPONENTS QtCore QtGui QtOpenGL REQUIRED)
> INCLUDE(${QT_USE_FILE})
>
> INCLUDE_DIRECTORIES(AFTER ${CMAKE_CURRENT_SOURCE_DIR})
>
> ADD_SUBDIRECTORY(common)
> ADD_SUBDIRECTORY(lib1)
> ADD_SUBDIRECTORY(lib2)
> ADD_SUBDIRECTORY(lib3)
> ADD_SUBDIRECTORY(main)
> ----------------------------------------------------------------------------
> --------
>
>
> Using QT_USE_FILE includes Qt headers for all of common, lib1, lib2, lib3.
> How can I include and link Qt only for lib3?
>
> Lib3's CMakeLists.txt looks like:
>
> ADD_LIBRARY(lib3 STATIC #cpps hpps ipps)
>
> ADD_DEPENDENCIES(lib3 common)
>
> TARGET_LINK_LIBRARIES(lib3 ${QT_LIBRARIES})
>
> Rds,
>
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html
>
> Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.cmake.org/mailman/listinfo/cmake
>



-- 
Pau Garcia i Quiles
http://www.elpauer.org
(Due to my workload, I may need 10 days to answer)


More information about the CMake mailing list