Qt4: Add module dependencies to the IMPORTED targets
This means for example, that consumers can use: target_link_libraries(foo ${QT_QTGUI_LIBRARIES}) instead of also needing to specify all 'public' dependencies: target_link_libraries(foo ${QT_QTGUI_LIBRARIES} ${QT_QTCORE_LIBRARIES} ) when using the IMPORTED targets. Also populate the IMPORTED_LINK_DEPENDENT_LIBRARIES property so CMake can help the linker find shared library dependencies.
This commit is contained in:
parent
00deb127be
commit
57a67bf27e
|
@ -942,12 +942,36 @@ if (QT_QMAKE_EXECUTABLE AND QTVERSION)
|
||||||
############################################
|
############################################
|
||||||
|
|
||||||
|
|
||||||
|
macro(_qt4_add_target_depends_internal _QT_MODULE _PROPERTY)
|
||||||
|
if (TARGET Qt4::${_QT_MODULE})
|
||||||
|
foreach(_DEPEND ${ARGN})
|
||||||
|
if (NOT TARGET Qt4::Qt${_DEPEND})
|
||||||
|
message(FATAL_ERROR "_qt4_add_target_depends invoked with invalid arguments")
|
||||||
|
endif()
|
||||||
|
set_property(TARGET Qt4::${_QT_MODULE} APPEND PROPERTY
|
||||||
|
${_PROPERTY}
|
||||||
|
"Qt4::Qt${_DEPEND}"
|
||||||
|
)
|
||||||
|
endforeach()
|
||||||
|
endif()
|
||||||
|
endmacro()
|
||||||
|
|
||||||
|
macro(_qt4_add_target_depends _QT_MODULE)
|
||||||
|
_qt4_add_target_depends_internal(${_QT_MODULE} IMPORTED_LINK_INTERFACE_LIBRARIES ${ARGN})
|
||||||
|
endmacro()
|
||||||
|
|
||||||
|
macro(_qt4_add_target_private_depends _QT_MODULE)
|
||||||
|
_qt4_add_target_depends_internal(${_QT_MODULE} IMPORTED_LINK_DEPENDENT_LIBRARIES ${ARGN})
|
||||||
|
endmacro()
|
||||||
|
|
||||||
|
|
||||||
# Set QT_xyz_LIBRARY variable and add
|
# Set QT_xyz_LIBRARY variable and add
|
||||||
# library include path to QT_INCLUDES
|
# library include path to QT_INCLUDES
|
||||||
_QT4_ADJUST_LIB_VARS(QtCore)
|
_QT4_ADJUST_LIB_VARS(QtCore)
|
||||||
|
|
||||||
foreach(QT_MODULE ${QT_MODULES})
|
foreach(QT_MODULE ${QT_MODULES})
|
||||||
_QT4_ADJUST_LIB_VARS(${QT_MODULE})
|
_QT4_ADJUST_LIB_VARS(${QT_MODULE})
|
||||||
|
_qt4_add_target_depends(${QT_MODULE} Core)
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
_QT4_ADJUST_LIB_VARS(QtAssistant)
|
_QT4_ADJUST_LIB_VARS(QtAssistant)
|
||||||
|
@ -962,6 +986,37 @@ if (QT_QMAKE_EXECUTABLE AND QTVERSION)
|
||||||
_QT4_ADJUST_LIB_VARS(QAxContainer)
|
_QT4_ADJUST_LIB_VARS(QAxContainer)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# Only public dependencies are listed here.
|
||||||
|
# Eg, QtDBus links to QtXml, but users of QtDBus do not need to
|
||||||
|
# link to QtXml because QtDBus only uses it internally, not in public
|
||||||
|
# headers.
|
||||||
|
# Everything depends on QtCore, but that is covered above already
|
||||||
|
_qt4_add_target_depends(Qt3Support Sql Gui Network)
|
||||||
|
_qt4_add_target_depends(QtDeclarative Script Gui)
|
||||||
|
_qt4_add_target_depends(QtDesigner Gui)
|
||||||
|
_qt4_add_target_depends(QtHelp Gui)
|
||||||
|
_qt4_add_target_depends(QtMultimedia Gui)
|
||||||
|
_qt4_add_target_depends(QtOpenGL Gui)
|
||||||
|
_qt4_add_target_depends(QtSvg Gui)
|
||||||
|
_qt4_add_target_depends(QtWebKit Gui Network)
|
||||||
|
|
||||||
|
_qt4_add_target_private_depends(Qt3Support Xml)
|
||||||
|
_qt4_add_target_private_depends(QtSvg Xml)
|
||||||
|
_qt4_add_target_private_depends(QtDBus Xml)
|
||||||
|
_qt4_add_target_private_depends(QtUiTools Xml Gui)
|
||||||
|
_qt4_add_target_private_depends(QtHelp Sql Xml Network)
|
||||||
|
_qt4_add_target_private_depends(QtXmlPatterns Network)
|
||||||
|
_qt4_add_target_private_depends(QtScriptTools Gui)
|
||||||
|
_qt4_add_target_private_depends(QtWebKit XmlPatterns)
|
||||||
|
_qt4_add_target_private_depends(QtDeclarative XmlPatterns Svg Sql Gui)
|
||||||
|
_qt4_add_target_private_depends(QtMultimedia Gui)
|
||||||
|
_qt4_add_target_private_depends(QtOpenGL Gui)
|
||||||
|
_qt4_add_target_private_depends(QAxServer Gui)
|
||||||
|
_qt4_add_target_private_depends(QAxContainer Gui)
|
||||||
|
_qt4_add_target_private_depends(phonon Gui)
|
||||||
|
if(QT_QTDBUS_FOUND)
|
||||||
|
_qt4_add_target_private_depends(phonon DBus)
|
||||||
|
endif()
|
||||||
|
|
||||||
#######################################
|
#######################################
|
||||||
#
|
#
|
||||||
|
|
|
@ -989,6 +989,21 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
|
||||||
)
|
)
|
||||||
list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/QtAutomoc")
|
list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/QtAutomoc")
|
||||||
endif()
|
endif()
|
||||||
|
if(QT4_WORKS AND QT_QTGUI_FOUND)
|
||||||
|
add_test(Qt4Targets ${CMAKE_CTEST_COMMAND}
|
||||||
|
--build-and-test
|
||||||
|
"${CMake_SOURCE_DIR}/Tests/Qt4Targets"
|
||||||
|
"${CMake_BINARY_DIR}/Tests/Qt4Targets"
|
||||||
|
--build-generator ${CMAKE_TEST_GENERATOR}
|
||||||
|
--build-project Qt4Targets
|
||||||
|
--build-makeprogram ${CMAKE_TEST_MAKEPROGRAM}
|
||||||
|
--build-exe-dir "${CMake_BINARY_DIR}/Tests/Qt4Targets"
|
||||||
|
--force-new-ctest-process
|
||||||
|
--build-options -DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE}
|
||||||
|
--test-command ${CMAKE_CTEST_COMMAND} -V
|
||||||
|
)
|
||||||
|
list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/Qt4Targets")
|
||||||
|
endif()
|
||||||
|
|
||||||
add_test(ExternalProject ${CMAKE_CTEST_COMMAND}
|
add_test(ExternalProject ${CMAKE_CTEST_COMMAND}
|
||||||
--build-and-test
|
--build-and-test
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
cmake_minimum_required(VERSION 2.8)
|
||||||
|
|
||||||
|
project(Qt4Targets)
|
||||||
|
|
||||||
|
find_package(Qt4 REQUIRED)
|
||||||
|
|
||||||
|
include_directories(${QT_INCLUDES})
|
||||||
|
|
||||||
|
add_executable(Qt4Targets WIN32 main.cpp)
|
||||||
|
target_link_libraries(Qt4Targets Qt4::QtGui)
|
||||||
|
|
||||||
|
if (WIN32)
|
||||||
|
target_link_libraries(Qt4Targets Qt4::qtmain)
|
||||||
|
endif()
|
|
@ -0,0 +1,16 @@
|
||||||
|
|
||||||
|
#include <QApplication>
|
||||||
|
#include <QWidget>
|
||||||
|
|
||||||
|
#include <QString>
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
QApplication app(argc, argv);
|
||||||
|
|
||||||
|
QWidget w;
|
||||||
|
w.setWindowTitle(QString::fromLatin1("SomeTitle"));
|
||||||
|
w.show();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue