瀏覽代碼

Merge topic 'xcode-pch'

476c6a8910 PCH: Fix Xcode non-pch language exclusion
fcf1fcfd0c Tests: Ignore all classes in Xcode internal objc warnings

Acked-by: Kitware Robot <[email protected]>
Acked-by: buildbot <[email protected]>
Merge-request: !7166
Brad King 3 年之前
父節點
當前提交
1e1b31ac25

+ 6 - 4
Source/cmLocalGenerator.cxx

@@ -2493,12 +2493,12 @@ void cmLocalGenerator::AddPchDependencies(cmGeneratorTarget* target)
     static const std::array<std::string, 4> langs = { { "C", "CXX", "OBJC",
                                                         "OBJCXX" } };
 
-    bool haveAnyPch = false;
+    std::set<std::string> pchLangSet;
     if (this->GetGlobalGenerator()->IsXcode()) {
       for (const std::string& lang : langs) {
         const std::string pchHeader = target->GetPchHeader(config, lang, "");
         if (!pchHeader.empty()) {
-          haveAnyPch = true;
+          pchLangSet.emplace(lang);
         }
       }
     }
@@ -2543,9 +2543,11 @@ void cmLocalGenerator::AddPchDependencies(cmGeneratorTarget* target)
         const std::string pchHeader = target->GetPchHeader(config, lang, arch);
 
         if (pchSource.empty() || pchHeader.empty()) {
-          if (this->GetGlobalGenerator()->IsXcode() && haveAnyPch) {
+          if (this->GetGlobalGenerator()->IsXcode() && !pchLangSet.empty()) {
             for (auto* sf : sources) {
-              sf->SetProperty("SKIP_PRECOMPILE_HEADERS", "ON");
+              if (pchLangSet.find(sf->GetLanguage()) == pchLangSet.end()) {
+                sf->SetProperty("SKIP_PRECOMPILE_HEADERS", "ON");
+              }
             }
           }
           continue;

+ 17 - 0
Tests/RunCMake/PrecompileHeaders/PchIncludedOneLanguage.cmake

@@ -0,0 +1,17 @@
+cmake_minimum_required(VERSION 3.16)
+project(PchIncludedAllLanguages C CXX)
+
+if(CMAKE_CXX_COMPILE_OPTIONS_USE_PCH)
+  add_definitions(-DHAVE_PCH_SUPPORT)
+endif()
+
+add_executable(main
+  main.cpp
+  empty.c
+  pch-included.cpp
+)
+
+target_precompile_headers(main PRIVATE $<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_SOURCE_DIR}/pch.h>)
+
+enable_testing()
+add_test(NAME main COMMAND main)

+ 1 - 0
Tests/RunCMake/PrecompileHeaders/RunCMakeTest.cmake

@@ -30,4 +30,5 @@ if(RunCMake_GENERATOR MATCHES "Make|Ninja")
 endif()
 run_test(PchReuseFromObjLib)
 run_test(PchIncludedAllLanguages)
+run_test(PchIncludedOneLanguage)
 run_test(PchLibObjLibExe)