VS: Make ImportLibary generation optional

Fixes: #21180
This commit is contained in:
Mark Jansen
2020-09-25 22:13:45 +02:00
committed by Brad King
parent d91c3e33cb
commit 7bda9a7fc7
5 changed files with 41 additions and 10 deletions

View File

@@ -1081,11 +1081,13 @@ void cmLocalVisualStudio7Generator::OutputBuildTool(
if (stackVal) {
fout << "\t\t\t\tStackReserveSize=\"" << *stackVal << "\"\n";
}
temp = cmStrCat(
target->GetDirectory(configName, cmStateEnums::ImportLibraryArtifact),
'/', targetNames.ImportLibrary);
fout << "\t\t\t\tImportLibrary=\""
<< this->ConvertToXMLOutputPathSingle(temp) << "\"";
if (!targetNames.ImportLibrary.empty()) {
temp = cmStrCat(target->GetDirectory(
configName, cmStateEnums::ImportLibraryArtifact),
'/', targetNames.ImportLibrary);
fout << "\t\t\t\tImportLibrary=\""
<< this->ConvertToXMLOutputPathSingle(temp) << "\"";
}
if (this->FortranProject) {
fout << "\n\t\t\t\tLinkDLL=\"true\"";
}

View File

@@ -3791,12 +3791,14 @@ bool cmVisualStudio10TargetGenerator::ComputeLinkOptions(
std::string pdb = cmStrCat(this->GeneratorTarget->GetPDBDirectory(config),
'/', targetNames.PDB);
std::string imLib =
cmStrCat(this->GeneratorTarget->GetDirectory(
config, cmStateEnums::ImportLibraryArtifact),
'/', targetNames.ImportLibrary);
if (!targetNames.ImportLibrary.empty()) {
std::string imLib =
cmStrCat(this->GeneratorTarget->GetDirectory(
config, cmStateEnums::ImportLibraryArtifact),
'/', targetNames.ImportLibrary);
linkOptions.AddFlag("ImportLibrary", imLib);
linkOptions.AddFlag("ImportLibrary", imLib);
}
linkOptions.AddFlag("ProgramDataBaseFile", pdb);
// A Windows Runtime component uses internal .NET metadata,

View File

@@ -0,0 +1,23 @@
set(vcProjectFile "${RunCMake_TEST_BINARY_DIR}/foo.vcxproj")
if(NOT EXISTS "${vcProjectFile}")
set(RunCMake_TEST_FAILED "Project file ${vcProjectFile} does not exist.")
return()
endif()
set(found_ImportLibrary 0)
set(found_TargetExt_dll 0)
file(STRINGS "${vcProjectFile}" lines)
foreach(line IN LISTS lines)
if(line MATCHES "<ImportLibrary>")
set(found_ImportLibrary 1)
endif()
if(line MATCHES "<TargetExt[^\n]*\\.dll")
set(found_TargetExt_dll 1)
endif()
endforeach()
if(found_ImportLibrary)
string(APPEND RunCMake_TEST_FAILED "ImportLibrary incorrectly found in\n ${vcProjectFile}\n")
endif()
if(NOT found_TargetExt_dll)
string(APPEND RunCMake_TEST_FAILED "TargetExt not found in\n ${vcProjectFile}\n")
endif()

View File

@@ -0,0 +1,3 @@
enable_language(C)
set(CMAKE_IMPORT_LIBRARY_SUFFIX "")
add_library(foo SHARED empty.c)

View File

@@ -11,6 +11,7 @@ run_cmake(VsCsharpSourceGroup)
run_cmake(VsCSharpCompilerOpts)
run_cmake(ExplicitCMakeLists)
run_cmake(InterfaceLibSources)
run_cmake(NoImpLib)
run_cmake(RuntimeLibrary)
run_cmake(SourceGroupCMakeLists)
run_cmake(SourceGroupTreeCMakeLists)