parent
863b0fa2ac
commit
2ce08e5489
@ -127,6 +127,7 @@ Properties on Targets
|
|||||||
/prop_tgt/ARCHIVE_OUTPUT_DIRECTORY
|
/prop_tgt/ARCHIVE_OUTPUT_DIRECTORY
|
||||||
/prop_tgt/ARCHIVE_OUTPUT_NAME_CONFIG
|
/prop_tgt/ARCHIVE_OUTPUT_NAME_CONFIG
|
||||||
/prop_tgt/ARCHIVE_OUTPUT_NAME
|
/prop_tgt/ARCHIVE_OUTPUT_NAME
|
||||||
|
/prop_tgt/PCH_WARN_INVALID
|
||||||
/prop_tgt/AUTOGEN_BUILD_DIR
|
/prop_tgt/AUTOGEN_BUILD_DIR
|
||||||
/prop_tgt/AUTOGEN_ORIGIN_DEPENDS
|
/prop_tgt/AUTOGEN_ORIGIN_DEPENDS
|
||||||
/prop_tgt/AUTOGEN_PARALLEL
|
/prop_tgt/AUTOGEN_PARALLEL
|
||||||
|
@ -438,6 +438,7 @@ Variables that Control the Build
|
|||||||
/variable/CMAKE_OSX_ARCHITECTURES
|
/variable/CMAKE_OSX_ARCHITECTURES
|
||||||
/variable/CMAKE_OSX_DEPLOYMENT_TARGET
|
/variable/CMAKE_OSX_DEPLOYMENT_TARGET
|
||||||
/variable/CMAKE_OSX_SYSROOT
|
/variable/CMAKE_OSX_SYSROOT
|
||||||
|
/variable/CMAKE_PCH_WARN_INVALID
|
||||||
/variable/CMAKE_PDB_OUTPUT_DIRECTORY
|
/variable/CMAKE_PDB_OUTPUT_DIRECTORY
|
||||||
/variable/CMAKE_PDB_OUTPUT_DIRECTORY_CONFIG
|
/variable/CMAKE_PDB_OUTPUT_DIRECTORY_CONFIG
|
||||||
/variable/CMAKE_POSITION_INDEPENDENT_CODE
|
/variable/CMAKE_POSITION_INDEPENDENT_CODE
|
||||||
|
8
Help/prop_tgt/PCH_WARN_INVALID.rst
Normal file
8
Help/prop_tgt/PCH_WARN_INVALID.rst
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
PCH_WARN_INVALID
|
||||||
|
----------------
|
||||||
|
|
||||||
|
When this property is set to true, the precompile header compiler options
|
||||||
|
will contain a compiler flag wich should warn about invalid precompiled
|
||||||
|
headers e.g. ``-Winvalid-pch`` for GNU compiler.
|
||||||
|
|
||||||
|
The defalut value is ``ON``.
|
6
Help/release/dev/pch-warn-invalid.rst
Normal file
6
Help/release/dev/pch-warn-invalid.rst
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
pch-warn-invalid
|
||||||
|
----------------
|
||||||
|
|
||||||
|
* The :variable:`CMAKE_PCH_WARN_INVALID` variable was added to initialize the
|
||||||
|
:prop_tgt:`PCH_WARN_INVALID` target property to allow the removal of the
|
||||||
|
precompiled header invalid warning.
|
5
Help/variable/CMAKE_PCH_WARN_INVALID.rst
Normal file
5
Help/variable/CMAKE_PCH_WARN_INVALID.rst
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
CMAKE_PCH_WARN_INVALID
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
This variable is used to initialize the :prop_tgt:`PCH_WARN_INVALID`
|
||||||
|
property of targets when they are created.
|
@ -114,6 +114,7 @@ macro(__compiler_gnu lang)
|
|||||||
if (NOT CMAKE_GENERATOR MATCHES "Xcode")
|
if (NOT CMAKE_GENERATOR MATCHES "Xcode")
|
||||||
set(CMAKE_PCH_PROLOGUE "#pragma GCC system_header")
|
set(CMAKE_PCH_PROLOGUE "#pragma GCC system_header")
|
||||||
endif()
|
endif()
|
||||||
set(CMAKE_${lang}_COMPILE_OPTIONS_USE_PCH -Winvalid-pch -include <PCH_HEADER>)
|
set(CMAKE_${lang}_COMPILE_OPTIONS_INVALID_PCH -Winvalid-pch)
|
||||||
set(CMAKE_${lang}_COMPILE_OPTIONS_CREATE_PCH -Winvalid-pch -x ${__pch_header_${lang}} -include <PCH_HEADER>)
|
set(CMAKE_${lang}_COMPILE_OPTIONS_USE_PCH -include <PCH_HEADER>)
|
||||||
|
set(CMAKE_${lang}_COMPILE_OPTIONS_CREATE_PCH -x ${__pch_header_${lang}} -include <PCH_HEADER>)
|
||||||
endmacro()
|
endmacro()
|
||||||
|
@ -37,7 +37,8 @@ else()
|
|||||||
set(CMAKE_PCH_EXTENSION .pchi)
|
set(CMAKE_PCH_EXTENSION .pchi)
|
||||||
set(CMAKE_LINK_PCH ON)
|
set(CMAKE_LINK_PCH ON)
|
||||||
set(CMAKE_PCH_EPILOGUE "#pragma hdrstop")
|
set(CMAKE_PCH_EPILOGUE "#pragma hdrstop")
|
||||||
set(CMAKE_${lang}_COMPILE_OPTIONS_USE_PCH -Winvalid-pch -Wno-pch-messages -pch-use <PCH_FILE> -include <PCH_HEADER>)
|
set(CMAKE_${lang}_COMPILE_OPTIONS_INVALID_PCH -Winvalid-pch)
|
||||||
set(CMAKE_${lang}_COMPILE_OPTIONS_CREATE_PCH -Winvalid-pch -Wno-pch-messages -pch-create <PCH_FILE> -include <PCH_HEADER>)
|
set(CMAKE_${lang}_COMPILE_OPTIONS_USE_PCH -Wno-pch-messages -pch-use <PCH_FILE> -include <PCH_HEADER>)
|
||||||
|
set(CMAKE_${lang}_COMPILE_OPTIONS_CREATE_PCH -Wno-pch-messages -pch-create <PCH_FILE> -include <PCH_HEADER>)
|
||||||
endmacro()
|
endmacro()
|
||||||
endif()
|
endif()
|
||||||
|
@ -3781,9 +3781,16 @@ std::string cmGeneratorTarget::GetPchCreateCompileOptions(
|
|||||||
if (inserted.second) {
|
if (inserted.second) {
|
||||||
std::string& createOptionList = inserted.first->second;
|
std::string& createOptionList = inserted.first->second;
|
||||||
|
|
||||||
|
if (this->GetPropertyAsBool("PCH_WARN_INVALID")) {
|
||||||
|
createOptionList = this->Makefile->GetSafeDefinition(
|
||||||
|
cmStrCat("CMAKE_", language, "_COMPILE_OPTIONS_INVALID_PCH"));
|
||||||
|
}
|
||||||
|
|
||||||
const std::string createOptVar =
|
const std::string createOptVar =
|
||||||
cmStrCat("CMAKE_", language, "_COMPILE_OPTIONS_CREATE_PCH");
|
cmStrCat("CMAKE_", language, "_COMPILE_OPTIONS_CREATE_PCH");
|
||||||
createOptionList = this->Makefile->GetSafeDefinition(createOptVar);
|
|
||||||
|
createOptionList = cmStrCat(
|
||||||
|
createOptionList, ";", this->Makefile->GetSafeDefinition(createOptVar));
|
||||||
|
|
||||||
const std::string pchHeader = this->GetPchHeader(config, language);
|
const std::string pchHeader = this->GetPchHeader(config, language);
|
||||||
const std::string pchFile = this->GetPchFile(config, language);
|
const std::string pchFile = this->GetPchFile(config, language);
|
||||||
@ -3802,9 +3809,16 @@ std::string cmGeneratorTarget::GetPchUseCompileOptions(
|
|||||||
if (inserted.second) {
|
if (inserted.second) {
|
||||||
std::string& useOptionList = inserted.first->second;
|
std::string& useOptionList = inserted.first->second;
|
||||||
|
|
||||||
|
if (this->GetPropertyAsBool("PCH_WARN_INVALID")) {
|
||||||
|
useOptionList = this->Makefile->GetSafeDefinition(
|
||||||
|
cmStrCat("CMAKE_", language, "_COMPILE_OPTIONS_INVALID_PCH"));
|
||||||
|
}
|
||||||
|
|
||||||
const std::string useOptVar =
|
const std::string useOptVar =
|
||||||
cmStrCat("CMAKE_", language, "_COMPILE_OPTIONS_USE_PCH");
|
cmStrCat("CMAKE_", language, "_COMPILE_OPTIONS_USE_PCH");
|
||||||
useOptionList = this->Makefile->GetSafeDefinition(useOptVar);
|
|
||||||
|
useOptionList = cmStrCat(useOptionList, ";",
|
||||||
|
this->Makefile->GetSafeDefinition(useOptVar));
|
||||||
|
|
||||||
const std::string pchHeader = this->GetPchHeader(config, language);
|
const std::string pchHeader = this->GetPchHeader(config, language);
|
||||||
const std::string pchFile = this->GetPchFile(config, language);
|
const std::string pchFile = this->GetPchFile(config, language);
|
||||||
|
@ -368,6 +368,7 @@ cmTarget::cmTarget(std::string const& name, cmStateEnums::TargetType type,
|
|||||||
initProp("DISABLE_PRECOMPILE_HEADERS");
|
initProp("DISABLE_PRECOMPILE_HEADERS");
|
||||||
initProp("UNITY_BUILD");
|
initProp("UNITY_BUILD");
|
||||||
initPropValue("UNITY_BUILD_BATCH_SIZE", "8");
|
initPropValue("UNITY_BUILD_BATCH_SIZE", "8");
|
||||||
|
initPropValue("PCH_WARN_INVALID", "ON");
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
if (this->GetGlobalGenerator()->IsXcode()) {
|
if (this->GetGlobalGenerator()->IsXcode()) {
|
||||||
initProp("XCODE_SCHEME_ADDRESS_SANITIZER");
|
initProp("XCODE_SCHEME_ADDRESS_SANITIZER");
|
||||||
|
@ -665,7 +665,7 @@ endif()
|
|||||||
|
|
||||||
add_RunCMake_test("CTestCommandExpandLists")
|
add_RunCMake_test("CTestCommandExpandLists")
|
||||||
|
|
||||||
add_RunCMake_test(PrecompileHeaders)
|
add_RunCMake_test(PrecompileHeaders -DCMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID})
|
||||||
add_RunCMake_test("UnityBuild")
|
add_RunCMake_test("UnityBuild")
|
||||||
|
|
||||||
add_RunCMake_test(cmake_command)
|
add_RunCMake_test(cmake_command)
|
||||||
|
22
Tests/RunCMake/PrecompileHeaders/PchWarnInvalid-check.cmake
Normal file
22
Tests/RunCMake/PrecompileHeaders/PchWarnInvalid-check.cmake
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
if (NOT CMAKE_C_COMPILER_ID MATCHES "GNU|Intel" OR
|
||||||
|
(CMAKE_C_COMPILER_ID STREQUAL "Intel" AND CMAKE_HOST_WIN32))
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
file(STRINGS ${RunCMake_TEST_BINARY_DIR}/compile_commands.json empty_dir_commands
|
||||||
|
REGEX "command.*-Winvalid-pch.*empty.dir/cmake_pch.h")
|
||||||
|
file(STRINGS ${RunCMake_TEST_BINARY_DIR}/compile_commands.json foo_dir_commands
|
||||||
|
REGEX "command.*-Winvalid-pch.*foo.dir/cmake_pch.h")
|
||||||
|
|
||||||
|
list(LENGTH empty_dir_commands empty_dir_commands_size)
|
||||||
|
list(LENGTH foo_dir_commands foo_dir_commands_size)
|
||||||
|
|
||||||
|
if (empty_dir_commands_size EQUAL 0)
|
||||||
|
set(RunCMake_TEST_FAILED "empty target should have -Winvalid-pch compile option present")
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (foo_dir_commands_size GREATER 0)
|
||||||
|
set(RunCMake_TEST_FAILED "foo target should not have -Winvalid-pch compile option present")
|
||||||
|
return()
|
||||||
|
endif()
|
16
Tests/RunCMake/PrecompileHeaders/PchWarnInvalid.cmake
Normal file
16
Tests/RunCMake/PrecompileHeaders/PchWarnInvalid.cmake
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
enable_language(C)
|
||||||
|
|
||||||
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||||
|
|
||||||
|
add_library(empty empty.c)
|
||||||
|
target_precompile_headers(empty PUBLIC
|
||||||
|
<stdio.h>
|
||||||
|
<string.h>
|
||||||
|
)
|
||||||
|
|
||||||
|
add_library(foo foo.c)
|
||||||
|
target_precompile_headers(foo PUBLIC
|
||||||
|
<stdio.h>
|
||||||
|
<string.h>
|
||||||
|
)
|
||||||
|
set_target_properties(foo PROPERTIES PCH_WARN_INVALID OFF)
|
@ -21,3 +21,6 @@ run_test(PchReuseFrom)
|
|||||||
run_test(PchReuseFromPrefixed)
|
run_test(PchReuseFromPrefixed)
|
||||||
run_test(PchReuseFromSubdir)
|
run_test(PchReuseFromSubdir)
|
||||||
run_cmake(PchMultilanguage)
|
run_cmake(PchMultilanguage)
|
||||||
|
if(RunCMake_GENERATOR MATCHES "Make|Ninja")
|
||||||
|
run_cmake(PchWarnInvalid)
|
||||||
|
endif()
|
||||||
|
Loading…
Reference in New Issue
Block a user