diff --git a/Source/cmFileAPICodemodel.cxx b/Source/cmFileAPICodemodel.cxx index b6d9bba95a..3d6041211f 100644 --- a/Source/cmFileAPICodemodel.cxx +++ b/Source/cmFileAPICodemodel.cxx @@ -1068,10 +1068,16 @@ Json::Value DirectoryObject::DumpInstaller(cmInstallGenerator* gen) } } else if (auto* installFileSet = dynamic_cast(gen)) { + auto const* fileSet = installFileSet->GetFileSet(); + + // No fileSet by that name exists for the associated target + if (!fileSet) { + return installer; + } + installer["type"] = "fileSet"; installer["destination"] = installFileSet->GetDestination(this->Config); - auto const* fileSet = installFileSet->GetFileSet(); auto* target = installFileSet->GetTarget(); auto dirCges = fileSet->CompileDirectoryEntries(); diff --git a/Tests/RunCMake/FileAPI/codemodel-v2-data/directories/fileset.json b/Tests/RunCMake/FileAPI/codemodel-v2-data/directories/fileset.json index f260037010..1cd9706183 100644 --- a/Tests/RunCMake/FileAPI/codemodel-v2-data/directories/fileset.json +++ b/Tests/RunCMake/FileAPI/codemodel-v2-data/directories/fileset.json @@ -187,7 +187,7 @@ "backtrace": [ { "file": "^fileset/CMakeLists\\.txt$", - "line": 25, + "line": 28, "command": "install", "hasParent": true }, diff --git a/Tests/RunCMake/FileAPI/codemodel-v2-data/targets/c_headers_2.json b/Tests/RunCMake/FileAPI/codemodel-v2-data/targets/c_headers_2.json index 04fdc360d6..7d767be739 100644 --- a/Tests/RunCMake/FileAPI/codemodel-v2-data/targets/c_headers_2.json +++ b/Tests/RunCMake/FileAPI/codemodel-v2-data/targets/c_headers_2.json @@ -88,7 +88,7 @@ "backtrace": [ { "file": "^fileset/CMakeLists\\.txt$", - "line": 25, + "line": 28, "command": "install", "hasParent": true }, diff --git a/Tests/RunCMake/FileAPI/fileset/CMakeLists.txt b/Tests/RunCMake/FileAPI/fileset/CMakeLists.txt index f80f12bee1..042e4e1055 100644 --- a/Tests/RunCMake/FileAPI/fileset/CMakeLists.txt +++ b/Tests/RunCMake/FileAPI/fileset/CMakeLists.txt @@ -21,5 +21,8 @@ install(TARGETS c_headers_1 FILE_SET HEADERS DESTINATION include COMPONENT Headers FILE_SET b DESTINATION include/dir FILE_SET c + + # Non-extant FILE_SET should be ignored + FILE_SET d ) install(TARGETS c_headers_2)