mirror of
https://github.com/Kitware/CMake.git
synced 2026-08-03 14:20:27 +00:00
Merge topic 'cxxmodules-pch'
40dc13b242cmNinjaTargetGenerator: PCH files do not need dyndepf61c64cd1ccmLocalGenerator: prevent scanning of PCH source filesea8c37b759Tests/CXXModules: add a test which scans a PCH-using source Acked-by: Kitware Robot <kwrobot@kitware.com> Tested-by: buildbot <buildbot@kitware.com> Merge-request: !9032
This commit is contained in:
@@ -2739,6 +2739,9 @@ void cmLocalGenerator::AddPchDependencies(cmGeneratorTarget* target)
|
||||
|
||||
auto* pch_sf = this->Makefile->GetOrCreateSource(
|
||||
pchSource, false, cmSourceFileLocationKind::Known);
|
||||
// PCH sources should never be scanned as they cannot contain C++
|
||||
// module references.
|
||||
pch_sf->SetProperty("CXX_SCAN_FOR_MODULES", "0");
|
||||
|
||||
if (!this->GetGlobalGenerator()->IsXcode()) {
|
||||
if (!ReuseFrom) {
|
||||
|
||||
@@ -1367,7 +1367,10 @@ void cmNinjaTargetGenerator::WriteObjectBuildStatement(
|
||||
!(language == "RC" || (language == "CUDA" && !flag));
|
||||
int const commandLineLengthLimit =
|
||||
((lang_supports_response && this->ForceResponseFile())) ? -1 : 0;
|
||||
bool const needDyndep =
|
||||
cmValue pchExtension =
|
||||
this->GetMakefile()->GetDefinition("CMAKE_PCH_EXTENSION");
|
||||
bool const isPch = cmHasSuffix(objectFileName, pchExtension);
|
||||
bool const needDyndep = !isPch &&
|
||||
this->GeneratorTarget->NeedDyndepForSource(language, config, source);
|
||||
|
||||
cmNinjaBuild objBuild(this->LanguageCompilerRule(
|
||||
@@ -1438,13 +1441,9 @@ void cmNinjaTargetGenerator::WriteObjectBuildStatement(
|
||||
}
|
||||
|
||||
objBuild.Outputs.push_back(objectFileName);
|
||||
if (firstForConfig) {
|
||||
cmValue pchExtension =
|
||||
this->GetMakefile()->GetDefinition("CMAKE_PCH_EXTENSION");
|
||||
if (!cmHasSuffix(objectFileName, pchExtension)) {
|
||||
// Add this object to the list of object files.
|
||||
this->Configs[config].Objects.push_back(objectFileName);
|
||||
}
|
||||
if (firstForConfig && !isPch) {
|
||||
// Add this object to the list of object files.
|
||||
this->Configs[config].Objects.push_back(objectFileName);
|
||||
}
|
||||
|
||||
objBuild.ExplicitDeps.push_back(sourceFilePath);
|
||||
|
||||
@@ -165,6 +165,8 @@ if (RunCMake_GENERATOR MATCHES "Ninja")
|
||||
run_cxx_module_test_target(ninja-cmp0154 "${ninja_cmp0154_target}")
|
||||
endif ()
|
||||
|
||||
run_cxx_module_test(scan-with-pch)
|
||||
|
||||
# Tests which use named modules.
|
||||
if ("named" IN_LIST CMake_TEST_MODULE_COMPILATION)
|
||||
run_cxx_module_test(simple)
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
cmake_minimum_required(VERSION 3.28)
|
||||
project(cxx_modules_scan_with_pch CXX)
|
||||
|
||||
include("${CMAKE_SOURCE_DIR}/../cxx-modules-rules.cmake")
|
||||
|
||||
add_executable(simple)
|
||||
target_sources(simple
|
||||
PRIVATE
|
||||
main.cxx)
|
||||
target_compile_features(simple PUBLIC cxx_std_20)
|
||||
target_precompile_headers(simple PRIVATE pch.h)
|
||||
|
||||
add_test(NAME simple COMMAND simple)
|
||||
@@ -0,0 +1,8 @@
|
||||
#ifndef from_pch
|
||||
# error "pch not present"
|
||||
#endif
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
1
Tests/RunCMake/CXXModules/examples/scan-with-pch/pch.h
Normal file
1
Tests/RunCMake/CXXModules/examples/scan-with-pch/pch.h
Normal file
@@ -0,0 +1 @@
|
||||
#define from_pch
|
||||
Reference in New Issue
Block a user