Sfoglia il codice sorgente

FindQt4: Set the INTERFACE_QT_MAJOR_VERSION for Qt4::QtCore

With a similar commit in Qt 5, this will error at CMake time if
an attempt is made to use

 target_link_libraries(foo Qt4::QtCore Qt5::Core)
Stephen Kelly 13 anni fa
parent
commit
4aa10cd6d6

+ 6 - 0
Modules/FindQt4.cmake

@@ -1022,6 +1022,12 @@ if (QT_QMAKE_EXECUTABLE AND QTVERSION)
       "${QT_MKSPECS_DIR}/default"
       ${QT_INCLUDE_DIR}
   )
+  set_property(TARGET Qt4::QtCore PROPERTY
+    INTERFACE_QT_MAJOR_VERSION 4
+  )
+  set_property(TARGET Qt4::QtCore APPEND PROPERTY
+    COMPATIBLE_INTERFACE_STRING QT_MAJOR_VERSION
+  )
 
   foreach(QT_MODULE ${QT_MODULES})
     _QT4_ADJUST_LIB_VARS(${QT_MODULE})

+ 6 - 0
Tests/RunCMake/CMakeLists.txt

@@ -75,6 +75,12 @@ add_RunCMake_test(include_directories)
 add_RunCMake_test(list)
 add_RunCMake_test(CMP0004)
 
+find_package(Qt4 QUIET)
+find_package(Qt5Core QUIET)
+if (QT4_FOUND AND Qt5Core_FOUND AND Qt5Core_VERSION VERSION_GREATER 5.0.2)
+  add_RunCMake_test(IncompatibleQt)
+endif()
+
 if("${CMAKE_TEST_GENERATOR}" MATCHES "Visual Studio [^6]")
   add_RunCMake_test(include_external_msproject)
   add_RunCMake_test(SolutionGlobalSections)

+ 3 - 0
Tests/RunCMake/IncompatibleQt/CMakeLists.txt

@@ -0,0 +1,3 @@
+cmake_minimum_required(VERSION 2.8)
+project(${RunCMake_TEST} CXX)
+include(${RunCMake_TEST}.cmake)

+ 1 - 0
Tests/RunCMake/IncompatibleQt/IncompatibleQt-result.txt

@@ -0,0 +1 @@
+1

+ 3 - 0
Tests/RunCMake/IncompatibleQt/IncompatibleQt-stderr.txt

@@ -0,0 +1,3 @@
+CMake Error: The INTERFACE_QT_MAJOR_VERSION property of "Qt5::Core" does
+not agree with the value of QT_MAJOR_VERSION already determined
+for "mainexe".

+ 6 - 0
Tests/RunCMake/IncompatibleQt/IncompatibleQt.cmake

@@ -0,0 +1,6 @@
+
+find_package(Qt4 REQUIRED)
+find_package(Qt5Core REQUIRED)
+
+add_executable(mainexe main.cpp)
+target_link_libraries(mainexe Qt4::QtCore Qt5::Core)

+ 3 - 0
Tests/RunCMake/IncompatibleQt/RunCMakeTest.cmake

@@ -0,0 +1,3 @@
+include(RunCMake)
+
+run_cmake(IncompatibleQt)

+ 8 - 0
Tests/RunCMake/IncompatibleQt/main.cpp

@@ -0,0 +1,8 @@
+
+#include <QCoreApplication>
+
+int main(int argc, char **argv)
+{
+  QCoreApplication app(argc, argv);
+  return app.exec();
+}