Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
CMake
CMake
Commits
c11cf31c
Commit
c11cf31c
authored
Oct 05, 2006
by
Brad King
Browse files
ENH: Adding SYSTEM option to INCLUDE_DIRECTORIES command. This addresses bug #3462.
parent
e36eb719
Changes
18
Hide whitespace changes
Inline
Side-by-side
Modules/Platform/gcc.cmake
View file @
c11cf31c
...
...
@@ -6,6 +6,7 @@ IF(CMAKE_COMPILER_IS_GNUCC)
SET
(
CMAKE_C_FLAGS_RELWITHDEBINFO_INIT
"-O2 -g"
)
SET
(
CMAKE_C_CREATE_PREPROCESSED_SOURCE
"<CMAKE_C_COMPILER> <FLAGS> -E <SOURCE> > <PREPROCESSED_SOURCE>"
)
SET
(
CMAKE_C_CREATE_ASSEMBLY_SOURCE
"<CMAKE_C_COMPILER> <FLAGS> -S <SOURCE> -o <ASSEMBLY_SOURCE>"
)
SET
(
CMAKE_INCLUDE_SYSTEM_FLAG_C
"-isystem "
)
ENDIF
(
CMAKE_COMPILER_IS_GNUCC
)
IF
(
CMAKE_COMPILER_IS_GNUCXX
)
...
...
@@ -16,5 +17,6 @@ IF(CMAKE_COMPILER_IS_GNUCXX)
SET
(
CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT
"-O2 -g"
)
SET
(
CMAKE_CXX_CREATE_PREPROCESSED_SOURCE
"<CMAKE_CXX_COMPILER> <FLAGS> -E <SOURCE> > <PREPROCESSED_SOURCE>"
)
SET
(
CMAKE_CXX_CREATE_ASSEMBLY_SOURCE
"<CMAKE_CXX_COMPILER> <FLAGS> -S <SOURCE> -o <ASSEMBLY_SOURCE>"
)
SET
(
CMAKE_INCLUDE_SYSTEM_FLAG_CXX
"-isystem "
)
ENDIF
(
CMAKE_COMPILER_IS_GNUCXX
)
Source/cmIncludeDirectoryCommand.cxx
View file @
c11cf31c
...
...
@@ -28,6 +28,7 @@ bool cmIncludeDirectoryCommand
std
::
vector
<
std
::
string
>::
const_iterator
i
=
args
.
begin
();
bool
before
=
this
->
Makefile
->
IsOn
(
"CMAKE_INCLUDE_DIRECTORIES_BEFORE"
);
bool
system
=
false
;
if
((
*
i
)
==
"BEFORE"
)
{
...
...
@@ -42,6 +43,11 @@ bool cmIncludeDirectoryCommand
for
(;
i
!=
args
.
end
();
++
i
)
{
if
(
*
i
==
"SYSTEM"
)
{
system
=
true
;
continue
;
}
if
(
i
->
size
()
==
0
)
{
cmSystemTools
::
Error
...
...
@@ -60,6 +66,10 @@ bool cmIncludeDirectoryCommand
}
}
this
->
Makefile
->
AddIncludeDirectory
(
unixPath
.
c_str
(),
before
);
if
(
system
)
{
this
->
Makefile
->
AddSystemIncludeDirectory
(
unixPath
.
c_str
());
}
}
return
true
;
}
...
...
Source/cmIncludeDirectoryCommand.h
View file @
c11cf31c
...
...
@@ -61,13 +61,16 @@ public:
virtual
const
char
*
GetFullDocumentation
()
{
return
" INCLUDE_DIRECTORIES([AFTER|BEFORE] dir1 dir2 ...)
\n
"
" INCLUDE_DIRECTORIES([AFTER|BEFORE]
[SYSTEM]
dir1 dir2 ...)
\n
"
"Add the given directories to those searched by the compiler for "
"include files. By default the directories are appended onto "
"the current list of directories. This default behavior can be "
"changed by setting CMAKE_INCLUDE_DIRECTORIES_BEFORE to ON. "
"By using BEFORE or AFTER you can select between appending and "
"prepending, independent from the default. "
;
"prepending, independent from the default. "
"If the SYSTEM option is given the compiler will be told that the "
"directories are meant as system include directories on some "
"platforms."
;
}
cmTypeMacro
(
cmIncludeDirectoryCommand
,
cmCommand
);
...
...
Source/cmLocalGenerator.cxx
View file @
c11cf31c
...
...
@@ -1044,6 +1044,17 @@ const char* cmLocalGenerator::GetIncludeFlags(const char* lang)
// given once i.e. -classpath a:b:c
repeatFlag
=
false
;
}
// Support special system include flag if it is available and the
// normal flag is repeated for each directory.
std
::
string
sysFlagVar
=
"CMAKE_INCLUDE_SYSTEM_FLAG_"
;
sysFlagVar
+=
lang
;
const
char
*
sysIncludeFlag
=
0
;
if
(
repeatFlag
)
{
sysIncludeFlag
=
this
->
Makefile
->
GetDefinition
(
sysFlagVar
.
c_str
());
}
bool
flagUsed
=
false
;
std
::
set
<
cmStdString
>
emitted
;
for
(
i
=
includes
.
begin
();
i
!=
includes
.
end
();
++
i
)
...
...
@@ -1066,7 +1077,15 @@ const char* cmLocalGenerator::GetIncludeFlags(const char* lang)
std
::
string
include
=
*
i
;
if
(
!
flagUsed
||
repeatFlag
)
{
includeFlags
<<
includeFlag
;
if
(
sysIncludeFlag
&&
this
->
Makefile
->
IsSystemIncludeDirectory
(
i
->
c_str
()))
{
includeFlags
<<
sysIncludeFlag
;
}
else
{
includeFlags
<<
includeFlag
;
}
flagUsed
=
true
;
}
std
::
string
includePath
=
this
->
ConvertToOutputForExisting
(
i
->
c_str
());
...
...
Source/cmMakefile.cxx
View file @
c11cf31c
...
...
@@ -106,6 +106,7 @@ cmMakefile::cmMakefile(const cmMakefile& mf)
this
->
Tests
=
mf
.
Tests
;
this
->
IncludeDirectories
=
mf
.
IncludeDirectories
;
this
->
LinkDirectories
=
mf
.
LinkDirectories
;
this
->
SystemIncludeDirectories
=
mf
.
SystemIncludeDirectories
;
this
->
ListFiles
=
mf
.
ListFiles
;
this
->
OutputFiles
=
mf
.
OutputFiles
;
this
->
LinkLibraries
=
mf
.
LinkLibraries
;
...
...
@@ -1025,6 +1026,7 @@ void cmMakefile::InitializeFromParent()
// copy include paths
this
->
IncludeDirectories
=
parent
->
IncludeDirectories
;
this
->
SystemIncludeDirectories
=
parent
->
SystemIncludeDirectories
;
// define flags
this
->
DefineFlags
=
parent
->
DefineFlags
;
...
...
@@ -1150,6 +1152,19 @@ void cmMakefile::AddIncludeDirectory(const char* inc, bool before)
}
}
//----------------------------------------------------------------------------
void
cmMakefile
::
AddSystemIncludeDirectory
(
const
char
*
dir
)
{
this
->
SystemIncludeDirectories
.
insert
(
dir
);
}
//----------------------------------------------------------------------------
bool
cmMakefile
::
IsSystemIncludeDirectory
(
const
char
*
dir
)
{
return
(
this
->
SystemIncludeDirectories
.
find
(
dir
)
!=
this
->
SystemIncludeDirectories
.
end
());
}
void
cmMakefile
::
AddDefinition
(
const
char
*
name
,
const
char
*
value
)
{
if
(
!
value
)
...
...
Source/cmMakefile.h
View file @
c11cf31c
...
...
@@ -441,6 +441,12 @@ public:
this
->
IncludeDirectories
=
vec
;
}
/**
* Mark include directories as system directories.
*/
void
AddSystemIncludeDirectory
(
const
char
*
dir
);
bool
IsSystemIncludeDirectory
(
const
char
*
dir
);
/** Expand out any arguements in the vector that have ; separated
* strings into multiple arguements. A new vector is created
* containing the expanded versions of all arguments in argsIn.
...
...
@@ -739,7 +745,11 @@ protected:
// dependency, so they must be vectors (not set).
std
::
vector
<
std
::
string
>
IncludeDirectories
;
std
::
vector
<
std
::
string
>
LinkDirectories
;
// The set of include directories that are marked as system include
// directories.
std
::
set
<
cmStdString
>
SystemIncludeDirectories
;
std
::
vector
<
std
::
string
>
ListFiles
;
// list of command files loaded
std
::
vector
<
std
::
string
>
OutputFiles
;
// list of command files loaded
...
...
Tests/Complex/CMakeLists.txt
View file @
c11cf31c
...
...
@@ -91,8 +91,8 @@ ENDIF(${fooCACHE_TEST_VAR2} MATCHES bar)
# Specify include and lib dirs
# (BEFORE is for coverage)
#
INCLUDE_DIRECTORIES
(
SYSTEM Library
)
INCLUDE_DIRECTORIES
(
Library
${
Complex_SOURCE_DIR
}
/../../Source
${
Complex_BINARY_DIR
}
/../../Source
)
...
...
@@ -101,7 +101,7 @@ INCLUDE_DIRECTORIES(BEFORE
${
Complex_BINARY_DIR
}
)
INCLUDE_REGULAR_EXPRESSION
(
"^(cmTest|file|sharedFile).*$"
"^cmMissing"
)
INCLUDE_REGULAR_EXPRESSION
(
"^(cmTest|file|sharedFile
|test
).*$"
"^cmMissing"
)
LINK_DIRECTORIES
(
${
Complex_BINARY_DIR
}
/Library
...
...
Tests/Complex/Executable/CMakeLists.txt
View file @
c11cf31c
...
...
@@ -118,6 +118,11 @@ ADD_DEPENDENCIES(notInAllCustom notInAllExe)
#
ADD_SUBDIRECTORY
(
Temp
)
IF
(
CMAKE_COMPILER_IS_GNUCXX
)
ADD_EXECUTABLE
(
testSystemDir testSystemDir.cxx
)
SET_TARGET_PROPERTIES
(
testSystemDir PROPERTIES COMPILE_FLAGS
"-Werror"
)
ENDIF
(
CMAKE_COMPILER_IS_GNUCXX
)
#
# Extra coverage.Not used.
#
...
...
Tests/Complex/Executable/testSystemDir.cxx
0 → 100644
View file @
c11cf31c
#include
<testSystemDir.h>
int
main
()
{
return
foo
();
}
Tests/Complex/Library/testSystemDir.h
0 → 100644
View file @
c11cf31c
// Purposely leave off the return type to create a warning.
foo
()
{
return
0
;
}
Tests/ComplexOneConfig/CMakeLists.txt
View file @
c11cf31c
...
...
@@ -91,8 +91,8 @@ ENDIF(${fooCACHE_TEST_VAR2} MATCHES bar)
# Specify include and lib dirs
# (BEFORE is for coverage)
#
INCLUDE_DIRECTORIES
(
SYSTEM Library
)
INCLUDE_DIRECTORIES
(
Library
${
Complex_SOURCE_DIR
}
/../../Source
${
Complex_BINARY_DIR
}
/../../Source
)
...
...
@@ -101,7 +101,7 @@ INCLUDE_DIRECTORIES(BEFORE
${
Complex_BINARY_DIR
}
)
INCLUDE_REGULAR_EXPRESSION
(
"^(cmTest|file|sharedFile).*$"
"^cmMissing"
)
INCLUDE_REGULAR_EXPRESSION
(
"^(cmTest|file|sharedFile
|test
).*$"
"^cmMissing"
)
LINK_DIRECTORIES
(
${
Complex_BINARY_DIR
}
/Library
...
...
Tests/ComplexOneConfig/Executable/CMakeLists.txt
View file @
c11cf31c
...
...
@@ -118,6 +118,11 @@ ADD_DEPENDENCIES(notInAllCustom notInAllExe)
#
ADD_SUBDIRECTORY
(
Temp
)
IF
(
CMAKE_COMPILER_IS_GNUCXX
)
ADD_EXECUTABLE
(
testSystemDir testSystemDir.cxx
)
SET_TARGET_PROPERTIES
(
testSystemDir PROPERTIES COMPILE_FLAGS
"-Werror"
)
ENDIF
(
CMAKE_COMPILER_IS_GNUCXX
)
#
# Extra coverage.Not used.
#
...
...
Tests/ComplexOneConfig/Executable/testSystemDir.cxx
0 → 100644
View file @
c11cf31c
#include
<testSystemDir.h>
int
main
()
{
return
foo
();
}
Tests/ComplexOneConfig/Library/testSystemDir.h
0 → 100644
View file @
c11cf31c
// Purposely leave off the return type to create a warning.
foo
()
{
return
0
;
}
Tests/ComplexRelativePaths/CMakeLists.txt
View file @
c11cf31c
...
...
@@ -91,8 +91,8 @@ ENDIF(${fooCACHE_TEST_VAR2} MATCHES bar)
# Specify include and lib dirs
# (BEFORE is for coverage)
#
INCLUDE_DIRECTORIES
(
SYSTEM Library
)
INCLUDE_DIRECTORIES
(
Library
${
Complex_SOURCE_DIR
}
/../../Source
${
Complex_BINARY_DIR
}
/../../Source
)
...
...
@@ -101,7 +101,7 @@ INCLUDE_DIRECTORIES(BEFORE
${
Complex_BINARY_DIR
}
)
INCLUDE_REGULAR_EXPRESSION
(
"^(cmTest|file|sharedFile).*$"
"^cmMissing"
)
INCLUDE_REGULAR_EXPRESSION
(
"^(cmTest|file|sharedFile
|test
).*$"
"^cmMissing"
)
LINK_DIRECTORIES
(
${
Complex_BINARY_DIR
}
/Library
...
...
Tests/ComplexRelativePaths/Executable/CMakeLists.txt
View file @
c11cf31c
...
...
@@ -118,6 +118,11 @@ ADD_DEPENDENCIES(notInAllCustom notInAllExe)
#
ADD_SUBDIRECTORY
(
Temp
)
IF
(
CMAKE_COMPILER_IS_GNUCXX
)
ADD_EXECUTABLE
(
testSystemDir testSystemDir.cxx
)
SET_TARGET_PROPERTIES
(
testSystemDir PROPERTIES COMPILE_FLAGS
"-Werror"
)
ENDIF
(
CMAKE_COMPILER_IS_GNUCXX
)
#
# Extra coverage.Not used.
#
...
...
Tests/ComplexRelativePaths/Executable/testSystemDir.cxx
0 → 100644
View file @
c11cf31c
#include
<testSystemDir.h>
int
main
()
{
return
foo
();
}
Tests/ComplexRelativePaths/Library/testSystemDir.h
0 → 100644
View file @
c11cf31c
// Purposely leave off the return type to create a warning.
foo
()
{
return
0
;
}
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment