diff --git a/Source/cmGeneratorTarget_Options.cxx b/Source/cmGeneratorTarget_Options.cxx index f1f0703586..d71146da70 100644 --- a/Source/cmGeneratorTarget_Options.cxx +++ b/Source/cmGeneratorTarget_Options.cxx @@ -548,8 +548,9 @@ std::vector>& cmGeneratorTarget::ResolvePrefixWrapper( const std::string SHELL{ "SHELL:" }; const std::string PREFIX_SHELL = cmStrCat(PREFIX, SHELL); - for (auto entry = result.begin(); entry != result.end(); ++entry) { + for (auto entry = result.begin(); entry != result.end();) { if (entry->Value.compare(0, PREFIX.length(), PREFIX) != 0) { + ++entry; continue; } @@ -594,10 +595,10 @@ std::vector>& cmGeneratorTarget::ResolvePrefixWrapper( entry, cmJoin(cmMakeRange(processedOptions.begin(), processedOptions.end()), " "_s)); - entry = std::next(result.begin(), index); + entry = std::next(result.begin(), index + 1); } else { result.insert(entry, processedOptions.begin(), processedOptions.end()); - entry = std::next(result.begin(), index + processedOptions.size() - 1); + entry = std::next(result.begin(), index + processedOptions.size()); } } return result; diff --git a/Tests/RunCMake/target_link_options/LINKER_expansion.cmake b/Tests/RunCMake/target_link_options/LINKER_expansion.cmake index 2219218976..7a2ffa1065 100644 --- a/Tests/RunCMake/target_link_options/LINKER_expansion.cmake +++ b/Tests/RunCMake/target_link_options/LINKER_expansion.cmake @@ -26,6 +26,7 @@ endfunction() # Use LINKER alone add_test_library(linker) target_link_options(linker PRIVATE "LINKER:-foo,bar") +target_link_options(linker PRIVATE "LINKER:") # empty # Use LINKER with SHELL add_test_library(linker_shell)