Browse Source

Merge topic 'windows-export-all-fix-objlib'

13a6ff31 VS: Fix WINDOWS_EXPORT_ALL_SYMBOLS for object libraries
Brad King 9 years ago
parent
commit
1fc340f0d4

+ 7 - 0
Source/cmGlobalVisualStudioGenerator.cxx

@@ -827,6 +827,7 @@ void cmGlobalVisualStudioGenerator::AddSymbolExportCommand(
     cmSystemTools::Error("could not open ", objs_file.c_str());
     return;
   }
+  std::vector<std::string> objs;
   for (std::vector<cmSourceFile const*>::const_iterator it =
          objectSources.begin();
        it != objectSources.end(); ++it) {
@@ -836,6 +837,12 @@ void cmGlobalVisualStudioGenerator::AddSymbolExportCommand(
     // It must exist because we populated the mapping just above.
     assert(!map_it->second.empty());
     std::string objFile = obj_dir + map_it->second;
+    objs.push_back(objFile);
+  }
+  gt->UseObjectLibraries(objs, configName);
+  for (std::vector<std::string>::iterator it = objs.begin(); it != objs.end();
+       ++it) {
+    std::string objFile = *it;
     // replace $(ConfigurationName) in the object names
     cmSystemTools::ReplaceString(objFile, this->GetCMakeCFGIntDir(),
                                  configName.c_str());

+ 3 - 1
Tests/RunCMake/AutoExportDll/AutoExport.cmake

@@ -2,7 +2,9 @@ project(autoexport)
 set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${autoexport_BINARY_DIR}/bin)
 add_subdirectory(sub)
-add_library(autoexport SHARED hello.cxx world.cxx foo.c)
+add_library(objlib OBJECT objlib.c)
+set_property(TARGET objlib PROPERTY POSITION_INDEPENDENT_CODE 1)
+add_library(autoexport SHARED hello.cxx world.cxx foo.c $<TARGET_OBJECTS:objlib>)
 
 add_executable(say say.cxx)
 if(MSVC)

+ 4 - 0
Tests/RunCMake/AutoExportDll/objlib.c

@@ -0,0 +1,4 @@
+int objlib()
+{
+  return 7;
+}

+ 2 - 0
Tests/RunCMake/AutoExportDll/say.cxx

@@ -11,6 +11,7 @@ extern "C" {
 int WINAPI foo();
 // test regular C
 int bar();
+int objlib();
 }
 
 // test c++ functions
@@ -39,6 +40,7 @@ int main()
   foo();
   printf("\n");
   bar();
+  objlib();
   printf("\n");
   return 0;
 }