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_SIMULATE_VERSION
|
||||||
/variable/CMAKE_LANG_SIZEOF_DATA_PTR
|
/variable/CMAKE_LANG_SIZEOF_DATA_PTR
|
||||||
/variable/CMAKE_LANG_SOURCE_FILE_EXTENSIONS
|
/variable/CMAKE_LANG_SOURCE_FILE_EXTENSIONS
|
||||||
|
/variable/CMAKE_LANG_STANDARD_INCLUDE_DIRECTORIES
|
||||||
/variable/CMAKE_LANG_STANDARD_LIBRARIES
|
/variable/CMAKE_LANG_STANDARD_LIBRARIES
|
||||||
/variable/CMAKE_USER_MAKE_RULES_OVERRIDE_LANG
|
/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
|
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
|
CMake's platform information modules for the current toolchain, or by a
|
||||||
toolchain file when used with :variable:`CMAKE_TOOLCHAIN_FILE`.
|
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);
|
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;
|
return includes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1385,6 +1385,9 @@ cmGlobalGenerator::CreateQtAutoGeneratorsTargets()
|
||||||
|
|
||||||
void cmGlobalGenerator::FinalizeTargetCompileInfo()
|
void cmGlobalGenerator::FinalizeTargetCompileInfo()
|
||||||
{
|
{
|
||||||
|
std::vector<std::string> const langs =
|
||||||
|
this->CMakeInstance->GetState()->GetEnabledLanguages();
|
||||||
|
|
||||||
// Construct per-target generator information.
|
// Construct per-target generator information.
|
||||||
for (unsigned int i = 0; i < this->Makefiles.size(); ++i) {
|
for (unsigned int i = 0; i < this->Makefiles.size(); ++i) {
|
||||||
cmMakefile* mf = this->Makefiles[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")
|
PROPERTIES COMPILE_FLAGS "-ITarProp")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
add_subdirectory(StandardIncludeDirectories)
|
||||||
add_subdirectory(TargetIncludeDirectories)
|
add_subdirectory(TargetIncludeDirectories)
|
||||||
|
|
||||||
set_property(DIRECTORY PROPERTY INCLUDE_DIRECTORIES "${CMAKE_BINARY_DIR}")
|
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