Ver Fonte

try_compile: Extract IMPORTED targets from INTERFACE_LINK_LIBRARIES

Stephen Kelly há 12 anos atrás
pai
commit
cc8f79670e

+ 2 - 1
Source/cmExportTryCompileFileGenerator.cxx

@@ -94,7 +94,8 @@ cmExportTryCompileFileGenerator::PopulateProperties(cmTarget* target,
     properties[i->first] = i->second.GetValue();
 
     if(i->first.find("IMPORTED_LINK_INTERFACE_LIBRARIES") == 0
-        || i->first.find("IMPORTED_LINK_DEPENDENT_LIBRARIES") == 0)
+        || i->first.find("IMPORTED_LINK_DEPENDENT_LIBRARIES") == 0
+        || i->first.find("INTERFACE_LINK_LIBRARIES") == 0)
       {
       const std::string libs = i->second.GetValue();
 

+ 18 - 1
Tests/ExportImport/Export/CMakeLists.txt

@@ -227,6 +227,21 @@ install(FILES
     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
   INCLUDE_DIRECTORIES "${CMAKE_CURRENT_BINARY_DIR}"
@@ -298,6 +313,7 @@ install(TARGETS
           testLibIncludeRequired6
           testSharedLibRequired
           testSharedLibRequiredUser
+          testSharedLibRequiredUser2
           noIncludesInterface
         EXPORT RequiredExp DESTINATION lib
         INCLUDES DESTINATION
@@ -398,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 testSharedLibRequiredUser testSharedLibDepends renamed_on_export
+  testSharedLibRequired testSharedLibRequiredUser testSharedLibRequiredUser2
+  testSharedLibDepends renamed_on_export
   cmp0022NEW cmp0022OLD
   NAMESPACE bld_
   FILE ExportBuildTree.cmake

+ 8 - 0
Tests/ExportImport/Export/testSharedLibRequiredUser2.cpp

@@ -0,0 +1,8 @@
+
+#include "testSharedLibRequiredUser2.h"
+
+TestSharedLibRequired TestSharedLibRequiredUser2::foo()
+{
+  TestSharedLibRequired req;
+  return req;
+}

+ 14 - 0
Tests/ExportImport/Export/testSharedLibRequiredUser2.h

@@ -0,0 +1,14 @@
+
+#ifndef TESTSHAREDLIBREQUIREDUSER2_H
+#define TESTSHAREDLIBREQUIREDUSER2_H
+
+#include "testsharedlibrequireduser2_export.h"
+
+#include "testSharedLibRequired.h"
+
+struct TESTSHAREDLIBREQUIREDUSER2_EXPORT TestSharedLibRequiredUser2
+{
+  TestSharedLibRequired foo();
+};
+
+#endif

+ 15 - 0
Tests/ExportImport/Import/try_compile/CMakeLists.txt

@@ -19,3 +19,18 @@ int main(int argc, char **argv)
 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()