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:
parent
4f7a6bdabe
commit
f16a77d783
@ -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
|
||||
|
@ -97,3 +97,4 @@ find_package(Qt5DBus QUIET)
|
||||
if (Qt5DBus_FOUND AND NOT APPLE)
|
||||
expect_pass(pass9)
|
||||
endif()
|
||||
expect_pass(pass10)
|
||||
|
9
tests/auto/cmake/pass10/CMakeLists.txt
Normal file
9
tests/auto/cmake/pass10/CMakeLists.txt
Normal file
@ -0,0 +1,9 @@
|
||||
|
||||
cmake_minimum_required(VERSION 2.8)
|
||||
|
||||
project(pass10)
|
||||
|
||||
find_package(Qt5Core REQUIRED)
|
||||
|
||||
add_subdirectory(subdir1)
|
||||
|
2
tests/auto/cmake/pass10/subdir1/CMakeLists.txt
Normal file
2
tests/auto/cmake/pass10/subdir1/CMakeLists.txt
Normal file
@ -0,0 +1,2 @@
|
||||
|
||||
find_package(Qt5Core REQUIRED)
|
Loading…
Reference in New Issue
Block a user