Browse Source

Merge topic 'doc-pch-compile-language'

ac75886525 PCH: Document and test COMPILE_LANGUAGE genex for per-language header

Acked-by: Kitware Robot <[email protected]>
Merge-request: !3925
Brad King 6 years ago
parent
commit
d61b8921ac

+ 4 - 0
Help/command/target_precompile_headers.rst

@@ -47,6 +47,9 @@ with the syntax ``$<...>``.
 See the :manual:`cmake-generator-expressions(7)` manual for available
 expressions.  See the :manual:`cmake-compile-features(7)` manual for
 information on compile features and a list of supported compilers.
+The ``$<COMPILE_LANGUAGE:...>`` generator expression is particularly
+useful for specifying a language-specific header to precompile for
+only one language (e.g. ``CXX`` and not ``C``).
 
 Usage
 ^^^^^
@@ -56,6 +59,7 @@ Usage
   target_precompile_headers(<target>
     PUBLIC
       project_header.h
+      "$<$<COMPILE_LANGUAGE:CXX>:cxx_only.h>"
     PRIVATE
       [["other_header.h"]]
       <unordered_map>

+ 14 - 0
Tests/RunCMake/PrecompileHeaders/PchMultilanguage-check.cmake

@@ -15,3 +15,17 @@ if (NOT EXISTS ${foobar_pch_hxx_header})
   set(RunCMake_TEST_FAILED "Generated foobar C++ pch header ${foobar_pch_hxx_header} does not exist")
   return()
 endif()
+
+file(STRINGS ${foobar_pch_h_header} foobar_pch_h_header_strings)
+
+if (NOT foobar_pch_h_header_strings MATCHES ";#include <stddef.h>(;|$)")
+  set(RunCMake_TEST_FAILED "Generated foo pch header\n  ${foobar_pch_h_header}\nhas bad content:\n  ${foobar_pch_h_header_strings}")
+  return()
+endif()
+
+file(STRINGS ${foobar_pch_hxx_header} foobar_pch_hxx_header_strings)
+
+if (NOT foobar_pch_hxx_header_strings MATCHES ";#include <cstddef>(;|$)")
+  set(RunCMake_TEST_FAILED "Generated foo pch header\n  ${foobar_pch_hxx_header}\nhas bad content:\n  ${foobar_pch_hxx_header_strings}")
+  return()
+endif()

+ 4 - 1
Tests/RunCMake/PrecompileHeaders/PchMultilanguage.cmake

@@ -6,4 +6,7 @@ add_executable(foobar
   main.cpp
 )
 target_include_directories(foobar PUBLIC include)
-target_precompile_headers(foobar PRIVATE "<stddef.h>")
+target_precompile_headers(foobar PRIVATE
+  "$<$<COMPILE_LANGUAGE:C>:<stddef.h$<ANGLE-R>>"
+  "$<$<COMPILE_LANGUAGE:CXX>:<cstddef$<ANGLE-R>>"
+  )