Add a variable to specify language-wide system include directories
Create a `CMAKE_<LANG>_STANDARD_INCLUDE_DIRECTORIES` variable to specify system include directories for for `<LANG>` compiler command lines. This plays a role for include directories as the existing `CMAKE_<LANG>_STANDARD_LIBRARIES` variable does for link libraries.
This commit is contained in:
parent
4419909756
commit
c13408279f
|
@ -365,6 +365,7 @@ Variables for Languages
|
|||
/variable/CMAKE_LANG_SIMULATE_VERSION
|
||||
/variable/CMAKE_LANG_SIZEOF_DATA_PTR
|
||||
/variable/CMAKE_LANG_SOURCE_FILE_EXTENSIONS
|
||||
/variable/CMAKE_LANG_STANDARD_INCLUDE_DIRECTORIES
|
||||
/variable/CMAKE_LANG_STANDARD_LIBRARIES
|
||||
/variable/CMAKE_USER_MAKE_RULES_OVERRIDE_LANG
|
||||
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
standard-include-directories
|
||||
----------------------------
|
||||
|
||||
* A :variable:`CMAKE_<LANG>_STANDARD_INCLUDE_DIRECTORIES` variable was
|
||||
added for use by toolchain files to specify system include directories
|
||||
to be appended to all compiler command lines.
|
|
@ -0,0 +1,14 @@
|
|||
CMAKE_<LANG>_STANDARD_INCLUDE_DIRECTORIES
|
||||
-----------------------------------------
|
||||
|
||||
Include directories to be used for every source file compiled with
|
||||
the ``<LANG>`` compiler. This is meant for specification of system
|
||||
include directories needed by the language for the current platform.
|
||||
The directories always appear at the end of the include path passed
|
||||
to the compiler.
|
||||
|
||||
This variable should not be set by project code. It is meant to be set by
|
||||
CMake's platform information modules for the current toolchain, or by a
|
||||
toolchain file when used with :variable:`CMAKE_TOOLCHAIN_FILE`.
|
||||
|
||||
See also :variable:`CMAKE_<LANG>_STANDARD_LIBRARIES`.
|
|
@ -8,3 +8,5 @@ libraries needed by the language for the current platform.
|
|||
This variable should not be set by project code. It is meant to be set by
|
||||
CMake's platform information modules for the current toolchain, or by a
|
||||
toolchain file when used with :variable:`CMAKE_TOOLCHAIN_FILE`.
|
||||
|
||||
See also :variable:`CMAKE_<LANG>_STANDARD_INCLUDE_DIRECTORIES`.
|
||||
|
|
|
@ -2415,6 +2415,18 @@ std::vector<std::string> cmGeneratorTarget::GetIncludeDirectories(
|
|||
|
||||
cmDeleteAll(linkInterfaceIncludeDirectoriesEntries);
|
||||
|
||||
// Add standard include directories for this language.
|
||||
std::string const standardIncludesVar =
|
||||
"CMAKE_" + lang + "_STANDARD_INCLUDE_DIRECTORIES";
|
||||
std::string const standardIncludes =
|
||||
this->Makefile->GetSafeDefinition(standardIncludesVar);
|
||||
std::vector<std::string>::size_type const before = includes.size();
|
||||
cmSystemTools::ExpandListArgument(standardIncludes, includes);
|
||||
for (std::vector<std::string>::iterator i = includes.begin() + before;
|
||||
i != includes.end(); ++i) {
|
||||
cmSystemTools::ConvertToUnixSlashes(*i);
|
||||
}
|
||||
|
||||
return includes;
|
||||
}
|
||||
|
||||
|
|
|
@ -1385,6 +1385,9 @@ cmGlobalGenerator::CreateQtAutoGeneratorsTargets()
|
|||
|
||||
void cmGlobalGenerator::FinalizeTargetCompileInfo()
|
||||
{
|
||||
std::vector<std::string> const langs =
|
||||
this->CMakeInstance->GetState()->GetEnabledLanguages();
|
||||
|
||||
// Construct per-target generator information.
|
||||
for (unsigned int i = 0; i < this->Makefiles.size(); ++i) {
|
||||
cmMakefile* mf = this->Makefiles[i];
|
||||
|
@ -1429,6 +1432,23 @@ void cmGlobalGenerator::FinalizeTargetCompileInfo()
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// The standard include directories for each language
|
||||
// should be treated as system include directories.
|
||||
std::set<std::string> standardIncludesSet;
|
||||
for (std::vector<std::string>::const_iterator li = langs.begin();
|
||||
li != langs.end(); ++li) {
|
||||
std::string const standardIncludesVar =
|
||||
"CMAKE_" + *li + "_STANDARD_INCLUDE_DIRECTORIES";
|
||||
std::string const standardIncludesStr =
|
||||
mf->GetSafeDefinition(standardIncludesVar);
|
||||
std::vector<std::string> standardIncludesVec;
|
||||
cmSystemTools::ExpandListArgument(standardIncludesStr,
|
||||
standardIncludesVec);
|
||||
standardIncludesSet.insert(standardIncludesVec.begin(),
|
||||
standardIncludesVec.end());
|
||||
}
|
||||
mf->AddSystemIncludeDirectories(standardIncludesSet);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -63,6 +63,7 @@ else()
|
|||
PROPERTIES COMPILE_FLAGS "-ITarProp")
|
||||
endif()
|
||||
|
||||
add_subdirectory(StandardIncludeDirectories)
|
||||
add_subdirectory(TargetIncludeDirectories)
|
||||
|
||||
set_property(DIRECTORY PROPERTY INCLUDE_DIRECTORIES "${CMAKE_BINARY_DIR}")
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
# Normally this variable should be set by a platform information module or
|
||||
# a toolchain file, but for purposes of this test we simply set it here.
|
||||
set(CMAKE_C_STANDARD_INCLUDE_DIRECTORIES ${CMAKE_CURRENT_SOURCE_DIR}/StdDir)
|
||||
|
||||
add_executable(StandardIncludeDirectories main.c)
|
|
@ -0,0 +1,5 @@
|
|||
#include "StdIncDir.h"
|
||||
int main()
|
||||
{
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue