mirror of
https://github.com/Kitware/CMake.git
synced 2026-08-05 07:10:26 +00:00
Unity: No repeated path for internal generated unity files
Fixes: #20002
This commit is contained in:
@@ -3148,6 +3148,22 @@ std::string cmLocalGenerator::GetObjectFileNameWithoutTarget(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Ensure that for the CMakeFiles/<target>.dir/generated_source_file
|
||||||
|
// we don't end up having:
|
||||||
|
// CMakeFiles/<target>.dir/CMakeFiles/<target>.dir/generated_source_file.obj
|
||||||
|
const char* unitySourceFile = source.GetProperty("UNITY_SOURCE_FILE");
|
||||||
|
const char* pchExtension = source.GetProperty("PCH_EXTENSION");
|
||||||
|
if (unitySourceFile || pchExtension) {
|
||||||
|
if (pchExtension) {
|
||||||
|
customOutputExtension = pchExtension;
|
||||||
|
}
|
||||||
|
|
||||||
|
cmsys::RegularExpression var("(CMakeFiles/[^/]+.dir/)");
|
||||||
|
if (var.find(objectName)) {
|
||||||
|
objectName.erase(var.start(), var.end() - var.start());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Replace the original source file extension with the object file
|
// Replace the original source file extension with the object file
|
||||||
// extension.
|
// extension.
|
||||||
bool keptSourceExtension = true;
|
bool keptSourceExtension = true;
|
||||||
@@ -3164,19 +3180,6 @@ std::string cmLocalGenerator::GetObjectFileNameWithoutTarget(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* pchExtension = source.GetProperty("PCH_EXTENSION");
|
|
||||||
if (pchExtension) {
|
|
||||||
customOutputExtension = pchExtension;
|
|
||||||
|
|
||||||
// Make sure that for the CMakeFiles/<target>.dir/cmake_pch.h|xx.c|xx
|
|
||||||
// source file, we don't end up having
|
|
||||||
// CMakeFiles/<target>.dir/CMakeFiles/<target>.dir/cmake_pch.h|xx.pch
|
|
||||||
cmsys::RegularExpression var("(CMakeFiles/[^/]+.dir/)");
|
|
||||||
while (var.find(objectName)) {
|
|
||||||
objectName.erase(var.start(), var.end() - var.start());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Remove the source extension if it is to be replaced.
|
// Remove the source extension if it is to be replaced.
|
||||||
if (replaceExt || customOutputExtension) {
|
if (replaceExt || customOutputExtension) {
|
||||||
keptSourceExtension = false;
|
keptSourceExtension = false;
|
||||||
|
|||||||
Reference in New Issue
Block a user