瀏覽代碼

try_compile: Extract IMPORTED targets from LINK_DEPENDENT_LIBRARIES

Stephen Kelly 12 年之前
父節點
當前提交
fd4fb9ef04

+ 2 - 1
Source/cmExportTryCompileFileGenerator.cxx

@@ -93,7 +93,8 @@ 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)
       {
       const std::string libs = i->second.GetValue();
 

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

@@ -213,6 +213,19 @@ 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
+)
 
 add_library(testSharedLibDepends SHARED testSharedLibDepends.cpp)
 set_property(TARGET testSharedLibDepends APPEND PROPERTY
@@ -284,6 +297,7 @@ install(TARGETS
           testLibIncludeRequired5
           testLibIncludeRequired6
           testSharedLibRequired
+          testSharedLibRequiredUser
           noIncludesInterface
         EXPORT RequiredExp DESTINATION lib
         INCLUDES DESTINATION
@@ -384,7 +398,7 @@ 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 testSharedLibDepends renamed_on_export
   cmp0022NEW cmp0022OLD
   NAMESPACE bld_
   FILE ExportBuildTree.cmake

+ 10 - 0
Tests/ExportImport/Export/testSharedLibRequiredUser.cpp

@@ -0,0 +1,10 @@
+
+#include "testSharedLibRequiredUser.h"
+
+#include "testSharedLibRequired.h"
+
+int TestSharedLibRequiredUser::foo()
+{
+  TestSharedLibRequired req;
+  return req.foo();
+}

+ 12 - 0
Tests/ExportImport/Export/testSharedLibRequiredUser.h

@@ -0,0 +1,12 @@
+
+#ifndef TESTSHAREDLIBREQUIREDUSER_H
+#define TESTSHAREDLIBREQUIREDUSER_H
+
+#include "testsharedlibrequireduser_export.h"
+
+struct TESTSHAREDLIBREQUIREDUSER_EXPORT TestSharedLibRequiredUser
+{
+  int foo();
+};
+
+#endif

+ 6 - 6
Tests/ExportImport/Import/try_compile/CMakeLists.txt

@@ -5,17 +5,17 @@ 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()