Use IF(NOT TARGET ...) before creating imported targets.

Initially we didn't do this because someone could accidentally create
another target of a conflicting name, and used a variable to store whether we
have created the target already or not.

That wasn't adequeate to deal with finding the package in a scope
like a function, so we used a directory property. However, the directory
property is not valid in the same scopes as the defined target. For
example, finding a Qt module in both a directory and a subdirectory causes
a conflict.

As it is already unlikely that a target would be accidentally created with
a name like Qt5::Core, we should simply use the IF(TARGET) form.

Change-Id: If64f25d45f51edcd1edb0d4bfb5ed3bb2479bd27
Reviewed-by: David Faure <faure@kde.org>
This commit is contained in:
Stephen Kelly 2012-05-15 14:35:42 +02:00 committed by Qt by Nokia
parent 4f7a6bdabe
commit f16a77d783
4 changed files with 13 additions and 3 deletions

View File

@ -109,9 +109,7 @@ list(APPEND _Qt5Gui_LIB_DEPENDENCIES ${JPEG_LIBRARIES})
!!ENDIF # Static
get_property(_qt5$${CMAKE_MODULE_NAME}TargetExists DIRECTORY PROPERTY _Qt5$${CMAKE_MODULE_NAME}_target)
if (NOT _qt5$${CMAKE_MODULE_NAME}TargetExists)
set_property(DIRECTORY PROPERTY _Qt5$${CMAKE_MODULE_NAME}_target TRUE)
if (NOT TARGET Qt5::$${CMAKE_MODULE_NAME})
!!IF !isEmpty(CMAKE_STATIC_TYPE)
add_library(Qt5::$${CMAKE_MODULE_NAME} STATIC IMPORTED)
!!ELSE

View File

@ -97,3 +97,4 @@ find_package(Qt5DBus QUIET)
if (Qt5DBus_FOUND AND NOT APPLE)
expect_pass(pass9)
endif()
expect_pass(pass10)

View File

@ -0,0 +1,9 @@
cmake_minimum_required(VERSION 2.8)
project(pass10)
find_package(Qt5Core REQUIRED)
add_subdirectory(subdir1)

View File

@ -0,0 +1,2 @@
find_package(Qt5Core REQUIRED)