mirror of
https://github.com/Kitware/CMake.git
synced 2026-02-16 20:21:41 -06:00
@@ -38,6 +38,8 @@ macro(__windows_compiler_clang_gnu lang)
|
||||
set(CMAKE_${lang}_LINKER_WRAPPER_FLAG "-Xlinker" " ")
|
||||
set(CMAKE_${lang}_LINKER_WRAPPER_FLAG_SEP)
|
||||
|
||||
set(CMAKE_${lang}_LINKER_MANIFEST_FLAG " -Xlinker /MANIFESTINPUT:")
|
||||
|
||||
if("${CMAKE_${lang}_SIMULATE_VERSION}" MATCHES "^([0-9]+)\\.([0-9]+)")
|
||||
math(EXPR MSVC_VERSION "${CMAKE_MATCH_1}*100 + ${CMAKE_MATCH_2}")
|
||||
endif()
|
||||
@@ -66,10 +68,10 @@ macro(__windows_compiler_clang_gnu lang)
|
||||
set(CMAKE_${lang}_ARCHIVE_APPEND "<CMAKE_AR> q <TARGET> <LINK_FLAGS> <OBJECTS>")
|
||||
set(CMAKE_${lang}_ARCHIVE_FINISH "<CMAKE_RANLIB> <TARGET>")
|
||||
set(CMAKE_${lang}_CREATE_SHARED_LIBRARY
|
||||
"<CMAKE_${lang}_COMPILER> -fuse-ld=lld-link -nostartfiles -nostdlib <CMAKE_SHARED_LIBRARY_${lang}_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS> -o <TARGET> ${CMAKE_GNULD_IMAGE_VERSION} -Xlinker /implib:<TARGET_IMPLIB> -Xlinker /pdb:<TARGET_PDB> -Xlinker /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR> <OBJECTS> <LINK_LIBRARIES>")
|
||||
"<CMAKE_${lang}_COMPILER> -fuse-ld=lld-link -nostartfiles -nostdlib <CMAKE_SHARED_LIBRARY_${lang}_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS> -o <TARGET> ${CMAKE_GNULD_IMAGE_VERSION} -Xlinker /MANIFEST:EMBED -Xlinker /implib:<TARGET_IMPLIB> -Xlinker /pdb:<TARGET_PDB> -Xlinker /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR> <OBJECTS> <LINK_LIBRARIES> <MANIFESTS>")
|
||||
set(CMAKE_${lang}_CREATE_SHARED_MODULE ${CMAKE_${lang}_CREATE_SHARED_LIBRARY})
|
||||
set(CMAKE_${lang}_LINK_EXECUTABLE
|
||||
"<CMAKE_${lang}_COMPILER> -fuse-ld=lld-link -nostartfiles -nostdlib <FLAGS> <CMAKE_${lang}_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> -Xlinker /implib:<TARGET_IMPLIB> -Xlinker /pdb:<TARGET_PDB> -Xlinker /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR> ${CMAKE_GNULD_IMAGE_VERSION} <LINK_LIBRARIES>")
|
||||
"<CMAKE_${lang}_COMPILER> -fuse-ld=lld-link -nostartfiles -nostdlib <FLAGS> <CMAKE_${lang}_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> -Xlinker /MANIFEST:EMBED -Xlinker /implib:<TARGET_IMPLIB> -Xlinker /pdb:<TARGET_PDB> -Xlinker /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR> ${CMAKE_GNULD_IMAGE_VERSION} <LINK_LIBRARIES> <MANIFESTS>")
|
||||
|
||||
set(CMAKE_${lang}_CREATE_WIN32_EXE "-Xlinker /subsystem:windows")
|
||||
set(CMAKE_${lang}_CREATE_CONSOLE_EXE "-Xlinker /subsystem:console")
|
||||
|
||||
@@ -240,11 +240,16 @@ std::string cmCommonTargetGenerator::GetManifests(const std::string& config)
|
||||
|
||||
std::vector<std::string> manifests;
|
||||
manifests.reserve(manifest_srcs.size());
|
||||
|
||||
std::string lang = this->GeneratorTarget->GetLinkerLanguage(config);
|
||||
std::string const& manifestFlag =
|
||||
this->Makefile->GetDefinition("CMAKE_" + lang + "_LINKER_MANIFEST_FLAG");
|
||||
for (cmSourceFile const* manifest_src : manifest_srcs) {
|
||||
manifests.push_back(this->LocalCommonGenerator->ConvertToOutputFormat(
|
||||
this->LocalCommonGenerator->MaybeRelativeToWorkDir(
|
||||
manifest_src->GetFullPath()),
|
||||
cmOutputConverter::SHELL));
|
||||
manifests.push_back(manifestFlag +
|
||||
this->LocalCommonGenerator->ConvertToOutputFormat(
|
||||
this->LocalCommonGenerator->MaybeRelativeToWorkDir(
|
||||
manifest_src->GetFullPath()),
|
||||
cmOutputConverter::SHELL));
|
||||
}
|
||||
|
||||
return cmJoin(manifests, " ");
|
||||
|
||||
@@ -7,4 +7,8 @@ if(MSVC AND NOT MSVC_VERSION LESS 1400)
|
||||
-P ${CMAKE_CURRENT_SOURCE_DIR}/check.cmake)
|
||||
add_executable(MSManifestNone main.c)
|
||||
set_property(TARGET MSManifestNone PROPERTY LINK_FLAGS "/MANIFEST:NO")
|
||||
elseif(WIN32 AND CMAKE_C_COMPILER_ID MATCHES "Clang")
|
||||
add_test(NAME MSManifest.Single COMMAND
|
||||
${CMAKE_COMMAND} -Dexe=$<TARGET_FILE:MSManifest>
|
||||
-P ${CMAKE_CURRENT_SOURCE_DIR}/check.cmake)
|
||||
endif()
|
||||
|
||||
@@ -6,7 +6,7 @@ add_executable(MSMultipleManifest main.c
|
||||
${CMAKE_CURRENT_BINARY_DIR}/test_manifest2.manifest
|
||||
${CMAKE_CURRENT_BINARY_DIR}/test_manifest3.manifest)
|
||||
|
||||
if(MSVC AND NOT MSVC_VERSION LESS 1400)
|
||||
if((MSVC AND NOT MSVC_VERSION LESS 1400) OR (WIN32 AND CMAKE_C_COMPILER_ID MATCHES "Clang") )
|
||||
add_test(NAME MSManifest.Multiple COMMAND
|
||||
${CMAKE_COMMAND} -Dexe=$<TARGET_FILE:MSMultipleManifest>
|
||||
-P ${CMAKE_CURRENT_SOURCE_DIR}/check.cmake)
|
||||
|
||||
Reference in New Issue
Block a user