Merge topic 'find-IMPORTED-targets-for-try_compile'
cc8f796
try_compile: Extract IMPORTED targets from INTERFACE_LINK_LIBRARIESfd4fb9e
try_compile: Extract IMPORTED targets from LINK_DEPENDENT_LIBRARIES
This commit is contained in:
commit
c5baca7804
|
@ -93,7 +93,9 @@ cmExportTryCompileFileGenerator::PopulateProperties(cmTarget* target,
|
|||
{
|
||||
properties[i->first] = i->second.GetValue();
|
||||
|
||||
if(i->first.find("IMPORTED_LINK_INTERFACE_LIBRARIES") == 0)
|
||||
if(i->first.find("IMPORTED_LINK_INTERFACE_LIBRARIES") == 0
|
||||
|| i->first.find("IMPORTED_LINK_DEPENDENT_LIBRARIES") == 0
|
||||
|| i->first.find("INTERFACE_LINK_LIBRARIES") == 0)
|
||||
{
|
||||
const std::string libs = i->second.GetValue();
|
||||
|
||||
|
|
|
@ -213,6 +213,34 @@ set_property(TARGET testSharedLibRequired APPEND PROPERTY
|
|||
$<$<CXX_COMPILER_ID:GNU>:-DCUSTOM_COMPILE_OPTION>
|
||||
)
|
||||
|
||||
add_library(testSharedLibRequiredUser SHARED testSharedLibRequiredUser.cpp)
|
||||
generate_export_header(testSharedLibRequiredUser)
|
||||
# LINK_PRIVATE so that it appears in the LINK_DEPENDENT_LIBRARIES, but not
|
||||
# the INTERFACE_LINK_LIBRARIES.
|
||||
set_property(TARGET testSharedLibRequiredUser APPEND PROPERTY
|
||||
INTERFACE_INCLUDE_DIRECTORIES "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR};${CMAKE_CURRENT_SOURCE_DIR}>"
|
||||
)
|
||||
target_link_libraries(testSharedLibRequiredUser LINK_PRIVATE testSharedLibRequired)
|
||||
install(FILES
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/testSharedLibRequiredUser.h"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/testsharedlibrequireduser_export.h"
|
||||
DESTINATION include/testSharedLibRequiredUser
|
||||
)
|
||||
|
||||
cmake_policy(SET CMP0022 NEW)
|
||||
add_library(testSharedLibRequiredUser2 SHARED testSharedLibRequiredUser2.cpp)
|
||||
generate_export_header(testSharedLibRequiredUser2)
|
||||
set_property(TARGET testSharedLibRequiredUser2 APPEND PROPERTY
|
||||
INTERFACE_INCLUDE_DIRECTORIES "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR};${CMAKE_CURRENT_SOURCE_DIR}>"
|
||||
)
|
||||
set_property(TARGET testSharedLibRequiredUser2 PROPERTY LINK_LIBRARIES testSharedLibRequired)
|
||||
set_property(TARGET testSharedLibRequiredUser2 PROPERTY INTERFACE_LINK_LIBRARIES testSharedLibRequired)
|
||||
install(FILES
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/testSharedLibRequiredUser2.h"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/testsharedlibrequireduser2_export.h"
|
||||
DESTINATION include/testSharedLibRequiredUser2
|
||||
)
|
||||
cmake_policy(SET CMP0022 OLD)
|
||||
|
||||
add_library(testSharedLibDepends SHARED testSharedLibDepends.cpp)
|
||||
set_property(TARGET testSharedLibDepends APPEND PROPERTY
|
||||
|
@ -284,6 +312,8 @@ install(TARGETS
|
|||
testLibIncludeRequired5
|
||||
testLibIncludeRequired6
|
||||
testSharedLibRequired
|
||||
testSharedLibRequiredUser
|
||||
testSharedLibRequiredUser2
|
||||
noIncludesInterface
|
||||
EXPORT RequiredExp DESTINATION lib
|
||||
INCLUDES DESTINATION
|
||||
|
@ -384,7 +414,8 @@ add_subdirectory(sublib) # For CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE test.
|
|||
# Export from build tree.
|
||||
export(TARGETS testExe1 testLib1 testLib2 testLib3
|
||||
testExe2libImp testLib3Imp testLib3ImpDep subdirlib
|
||||
testSharedLibRequired testSharedLibDepends renamed_on_export
|
||||
testSharedLibRequired testSharedLibRequiredUser testSharedLibRequiredUser2
|
||||
testSharedLibDepends renamed_on_export
|
||||
cmp0022NEW cmp0022OLD
|
||||
NAMESPACE bld_
|
||||
FILE ExportBuildTree.cmake
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
|
||||
#include "testSharedLibRequiredUser.h"
|
||||
|
||||
#include "testSharedLibRequired.h"
|
||||
|
||||
int TestSharedLibRequiredUser::foo()
|
||||
{
|
||||
TestSharedLibRequired req;
|
||||
return req.foo();
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
|
||||
#ifndef TESTSHAREDLIBREQUIREDUSER_H
|
||||
#define TESTSHAREDLIBREQUIREDUSER_H
|
||||
|
||||
#include "testsharedlibrequireduser_export.h"
|
||||
|
||||
struct TESTSHAREDLIBREQUIREDUSER_EXPORT TestSharedLibRequiredUser
|
||||
{
|
||||
int foo();
|
||||
};
|
||||
|
||||
#endif
|
|
@ -0,0 +1,8 @@
|
|||
|
||||
#include "testSharedLibRequiredUser2.h"
|
||||
|
||||
TestSharedLibRequired TestSharedLibRequiredUser2::foo()
|
||||
{
|
||||
TestSharedLibRequired req;
|
||||
return req;
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
|
||||
#ifndef TESTSHAREDLIBREQUIREDUSER2_H
|
||||
#define TESTSHAREDLIBREQUIREDUSER2_H
|
||||
|
||||
#include "testsharedlibrequireduser2_export.h"
|
||||
|
||||
#include "testSharedLibRequired.h"
|
||||
|
||||
struct TESTSHAREDLIBREQUIREDUSER2_EXPORT TestSharedLibRequiredUser2
|
||||
{
|
||||
TestSharedLibRequired foo();
|
||||
};
|
||||
|
||||
#endif
|
|
@ -5,17 +5,32 @@ find_package(testLibRequired 2.5 REQUIRED)
|
|||
|
||||
include(CheckCXXSourceCompiles)
|
||||
|
||||
set(CMAKE_REQUIRED_LIBRARIES Req::testSharedLibRequired)
|
||||
set(CMAKE_REQUIRED_LIBRARIES Req::testSharedLibRequiredUser)
|
||||
check_cxx_source_compiles(
|
||||
"
|
||||
#include \"testSharedLibRequired.h\"
|
||||
#include \"testSharedLibRequiredUser.h\"
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
TestSharedLibRequired req;
|
||||
return req.foo();
|
||||
TestSharedLibRequiredUser user;
|
||||
return user.foo();
|
||||
}
|
||||
" SHARED_LIB_REQUIRED)
|
||||
" SHARED_LIB_DEPENDS)
|
||||
|
||||
if(NOT SHARED_LIB_REQUIRED)
|
||||
if(NOT SHARED_LIB_DEPENDS)
|
||||
message(SEND_ERROR "try_compile with IMPORTED targets failed!\n\n${OUTPUT}")
|
||||
endif()
|
||||
|
||||
set(CMAKE_REQUIRED_LIBRARIES Req::testSharedLibRequiredUser2)
|
||||
check_cxx_source_compiles(
|
||||
"
|
||||
#include \"testSharedLibRequiredUser2.h\"
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
TestSharedLibRequiredUser2 user;
|
||||
return user.foo().foo();
|
||||
}
|
||||
" SHARED_LIB_DEPENDS2)
|
||||
|
||||
if(NOT SHARED_LIB_DEPENDS2)
|
||||
message(SEND_ERROR "try_compile with IMPORTED targets failed!\n\n${OUTPUT}")
|
||||
endif()
|
||||
|
|
Loading…
Reference in New Issue