components/cmake/files/man7/cmake-buildsystem.7
author April Chin <april.chin@oracle.com>
Wed, 11 Nov 2015 12:06:59 -0800
changeset 5081 198d4a3e4b73
permissions -rw-r--r--
21834219 update cmake to 3.3.2 22121918 enable system-test target for cmake
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5081
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
     1
.\" Man page generated from reStructuredText.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
     2
.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
     3
.TH "CMAKE-BUILDSYSTEM" "7" "October 14, 2015" "3.3.2" "CMake"
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
     4
.SH NAME
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
     5
cmake-buildsystem \- CMake Buildsystem Reference
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
     6
.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
     7
.nr rst2man-indent-level 0
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
     8
.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
     9
.de1 rstReportMargin
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    10
\\$1 \\n[an-margin]
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    11
level \\n[rst2man-indent-level]
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    12
level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    13
-
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    14
\\n[rst2man-indent0]
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    15
\\n[rst2man-indent1]
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    16
\\n[rst2man-indent2]
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    17
..
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    18
.de1 INDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    19
.\" .rstReportMargin pre:
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    20
. RS \\$1
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    21
. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    22
. nr rst2man-indent-level +1
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    23
.\" .rstReportMargin post:
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    24
..
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    25
.de UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    26
. RE
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    27
.\" indent \\n[an-margin]
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    28
.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    29
.nr rst2man-indent-level -1
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    30
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    31
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    32
..
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    33
.SH INTRODUCTION
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    34
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    35
A CMake\-based buildsystem is organized as a set of high\-level logical
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    36
targets.  Each target corresponds to an executable or library, or
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    37
is a custom target containing custom commands.  Dependencies between the
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    38
targets are expressed in the buildsystem to determine the build order
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    39
and the rules for regeneration in response to change.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    40
.SH BINARY TARGETS
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    41
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    42
Executables and libraries are defined using the \fBadd_executable()\fP
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    43
and \fBadd_library()\fP commands.  The resulting binary files have
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    44
appropriate prefixes, suffixes and extensions for the platform targeted.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    45
Dependencies between binary targets are expressed using the
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    46
\fBtarget_link_libraries()\fP command:
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    47
.INDENT 0.0
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    48
.INDENT 3.5
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    49
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    50
.nf
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    51
.ft C
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    52
add_library(archive archive.cpp zip.cpp lzma.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    53
add_executable(zipapp zipapp.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    54
target_link_libraries(zipapp archive)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    55
.ft P
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    56
.fi
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    57
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    58
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    59
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    60
\fBarchive\fP is defined as a static library \-\- an archive containing objects
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    61
compiled from \fBarchive.cpp\fP, \fBzip.cpp\fP, and \fBlzma.cpp\fP\&.  \fBzipapp\fP
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    62
is defined as an executable formed by compiling and linking \fBzipapp.cpp\fP\&.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    63
When linking the \fBzipapp\fP executable, the \fBarchive\fP static library is
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    64
linked in.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    65
.SS Binary Executables
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    66
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    67
The \fBadd_executable()\fP command defines an executable target:
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    68
.INDENT 0.0
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    69
.INDENT 3.5
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    70
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    71
.nf
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    72
.ft C
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    73
add_executable(mytool mytool.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    74
.ft P
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    75
.fi
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    76
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    77
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    78
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    79
Commands such as \fBadd_custom_command()\fP, which generates rules to be
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    80
run at build time can transparently use an \fBEXECUTABLE\fP
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    81
target as a \fBCOMMAND\fP executable.  The buildsystem rules will ensure that
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    82
the executable is built before attempting to run the command.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    83
.SS Binary Library Types
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    84
.SS Normal Libraries
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    85
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    86
By default, the \fBadd_library()\fP command defines a static library,
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    87
unless a type is specified.  A type may be specified when using the command:
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    88
.INDENT 0.0
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    89
.INDENT 3.5
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    90
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    91
.nf
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    92
.ft C
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    93
add_library(archive SHARED archive.cpp zip.cpp lzma.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    94
.ft P
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    95
.fi
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    96
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    97
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    98
.INDENT 0.0
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
    99
.INDENT 3.5
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   100
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   101
.nf
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   102
.ft C
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   103
add_library(archive STATIC archive.cpp zip.cpp lzma.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   104
.ft P
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   105
.fi
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   106
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   107
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   108
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   109
The \fBBUILD_SHARED_LIBS\fP variable may be enabled to change the
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   110
behavior of \fBadd_library()\fP to build shared libraries by default.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   111
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   112
In the context of the buildsystem definition as a whole, it is largely
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   113
irrelevant whether particular libraries are \fBSHARED\fP or \fBSTATIC\fP \-\-
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   114
the commands, dependency specifications and other APIs work similarly
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   115
regardless of the library type.  The \fBMODULE\fP library type is
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   116
dissimilar in that it is generally not linked to \-\- it is not used in
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   117
the right\-hand\-side of the \fBtarget_link_libraries()\fP command.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   118
It is a type which is loaded as a plugin using runtime techniques.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   119
.INDENT 0.0
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   120
.INDENT 3.5
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   121
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   122
.nf
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   123
.ft C
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   124
add_library(archive MODULE 7z.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   125
.ft P
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   126
.fi
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   127
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   128
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   129
.SS Object Libraries
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   130
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   131
The \fBOBJECT\fP library type is also not linked to. It defines a non\-archival
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   132
collection of object files resulting from compiling the given source files.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   133
The object files collection can be used as source inputs to other targets:
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   134
.INDENT 0.0
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   135
.INDENT 3.5
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   136
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   137
.nf
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   138
.ft C
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   139
add_library(archive OBJECT archive.cpp zip.cpp lzma.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   140
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   141
add_library(archiveExtras STATIC $<TARGET_OBJECTS:archive> extras.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   142
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   143
add_executable(test_exe $<TARGET_OBJECTS:archive> test.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   144
.ft P
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   145
.fi
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   146
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   147
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   148
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   149
\fBOBJECT\fP libraries may only be used locally as sources in a buildsystem \-\-
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   150
they may not be installed, exported, or used in the right hand side of
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   151
\fBtarget_link_libraries()\fP\&.  They also may not be used as the \fBTARGET\fP
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   152
in a use of the \fBadd_custom_command(TARGET)\fP command signature.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   153
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   154
Although object libraries may not be named directly in calls to
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   155
the \fBtarget_link_libraries()\fP command, they can be "linked"
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   156
indirectly by using an \fI\%Interface Library\fP
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   157
whose \fBINTERFACE_SOURCES\fP target property is set to name
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   158
\fB$<TARGET_OBJECTS:objlib>\fP\&.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   159
.SH BUILD SPECIFICATION AND USAGE REQUIREMENTS
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   160
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   161
The \fBtarget_include_directories()\fP, \fBtarget_compile_definitions()\fP
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   162
and \fBtarget_compile_options()\fP commands specify the build specifications
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   163
and the usage requirements of binary targets.  The commands populate the
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   164
\fBINCLUDE_DIRECTORIES\fP, \fBCOMPILE_DEFINITIONS\fP and
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   165
\fBCOMPILE_OPTIONS\fP target properties respectively, and/or the
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   166
\fBINTERFACE_INCLUDE_DIRECTORIES\fP, \fBINTERFACE_COMPILE_DEFINITIONS\fP
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   167
and \fBINTERFACE_COMPILE_OPTIONS\fP target properties.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   168
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   169
Each of the commands has a \fBPRIVATE\fP, \fBPUBLIC\fP and \fBINTERFACE\fP mode.  The
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   170
\fBPRIVATE\fP mode populates only the non\-\fBINTERFACE_\fP variant of the target
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   171
property and the \fBINTERFACE\fP mode populates only the \fBINTERFACE_\fP variants.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   172
The \fBPUBLIC\fP mode populates both variants of the repective target property.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   173
Each command may be invoked with multiple uses of each keyword:
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   174
.INDENT 0.0
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   175
.INDENT 3.5
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   176
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   177
.nf
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   178
.ft C
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   179
target_compile_definitions(archive
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   180
  PRIVATE BUILDING_WITH_LZMA
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   181
  INTERFACE USING_ARCHIVE_LIB
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   182
)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   183
.ft P
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   184
.fi
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   185
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   186
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   187
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   188
Note that usage requirements are not designed as a way to make downstreams
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   189
use particular \fBCOMPILE_OPTIONS\fP or
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   190
\fBCOMPILE_DEFINITIONS\fP etc for convenience only.  The contents of
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   191
the properties must be \fBrequirements\fP, not merely recommendations or
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   192
convenience.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   193
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   194
See the Creating Relocatable Packages section of the
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   195
\fBcmake\-packages(7)\fP manual for discussion of additional care
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   196
that must be taken when specifying usage requirements while creating
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   197
packages for redistribution.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   198
.SS Target Properties
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   199
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   200
The contents of the \fBINCLUDE_DIRECTORIES\fP,
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   201
\fBCOMPILE_DEFINITIONS\fP and \fBCOMPILE_OPTIONS\fP target
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   202
properties are used appropriately when compiling the source files of a
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   203
binary target.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   204
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   205
Entries in the \fBINCLUDE_DIRECTORIES\fP are added to the compile line
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   206
with \fB\-I\fP or \fB\-isystem\fP prefixes and in the order of appearance in the
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   207
property value.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   208
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   209
Entries in the \fBCOMPILE_DEFINITIONS\fP are prefixed with \fB\-D\fP or
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   210
\fB/D\fP and added to the compile line in an unspecified order.  The
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   211
\fBDEFINE_SYMBOL\fP target property is also added as a compile
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   212
definition as a special convenience case for \fBSHARED\fP and \fBMODULE\fP
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   213
library targets.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   214
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   215
Entries in the \fBCOMPILE_OPTIONS\fP are escaped for the shell and added
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   216
in the order of appearance in the property value.  Several compile options have
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   217
special separate handling, such as \fBPOSITION_INDEPENDENT_CODE\fP\&.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   218
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   219
The contents of the \fBINTERFACE_INCLUDE_DIRECTORIES\fP,
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   220
\fBINTERFACE_COMPILE_DEFINITIONS\fP and
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   221
\fBINTERFACE_COMPILE_OPTIONS\fP target properties are
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   222
\fIUsage Requirements\fP \-\- they specify content which consumers
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   223
must use to correctly compile and link with the target they appear on.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   224
For any binary target, the contents of each \fBINTERFACE_\fP property on
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   225
each target specified in a \fBtarget_link_libraries()\fP command is
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   226
consumed:
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   227
.INDENT 0.0
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   228
.INDENT 3.5
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   229
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   230
.nf
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   231
.ft C
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   232
set(srcs archive.cpp zip.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   233
if (LZMA_FOUND)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   234
  list(APPEND srcs lzma.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   235
endif()
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   236
add_library(archive SHARED ${srcs})
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   237
if (LZMA_FOUND)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   238
  # The archive library sources are compiled with \-DBUILDING_WITH_LZMA
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   239
  target_compile_definitions(archive PRIVATE BUILDING_WITH_LZMA)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   240
endif()
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   241
target_compile_definitions(archive INTERFACE USING_ARCHIVE_LIB)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   242
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   243
add_executable(consumer)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   244
# Link consumer to archive and consume its usage requirements. The consumer
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   245
# executable sources are compiled with \-DUSING_ARCHIVE_LIB.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   246
target_link_libraries(consumer archive)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   247
.ft P
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   248
.fi
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   249
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   250
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   251
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   252
Because it is common to require that the source directory and corresponding
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   253
build directory are added to the \fBINCLUDE_DIRECTORIES\fP, the
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   254
\fBCMAKE_INCLUDE_CURRENT_DIR\fP variable can be enabled to conveniently
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   255
add the corresponding directories to the \fBINCLUDE_DIRECTORIES\fP of
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   256
all targets.  The variable \fBCMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE\fP
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   257
can be enabled to add the corresponding directories to the
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   258
\fBINTERFACE_INCLUDE_DIRECTORIES\fP of all targets.  This makes use of
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   259
targets in multiple different directories convenient through use of the
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   260
\fBtarget_link_libraries()\fP command.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   261
.SS Transitive Usage Requirements
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   262
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   263
The usage requirements of a target can transitively propagate to dependents.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   264
The \fBtarget_link_libraries()\fP command has \fBPRIVATE\fP,
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   265
\fBINTERFACE\fP and \fBPUBLIC\fP keywords to control the propagation.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   266
.INDENT 0.0
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   267
.INDENT 3.5
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   268
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   269
.nf
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   270
.ft C
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   271
add_library(archive archive.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   272
target_compile_definitions(archive INTERFACE USING_ARCHIVE_LIB)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   273
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   274
add_library(serialization serialization.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   275
target_compile_definitions(serialization INTERFACE USING_SERIALIZATION_LIB)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   276
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   277
add_library(archiveExtras extras.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   278
target_link_libraries(archiveExtras PUBLIC archive)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   279
target_link_libraries(archiveExtras PRIVATE serialization)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   280
# archiveExtras is compiled with \-DUSING_ARCHIVE_LIB
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   281
# and \-DUSING_SERIALIZATION_LIB
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   282
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   283
add_executable(consumer consumer.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   284
# consumer is compiled with \-DUSING_ARCHIVE_LIB
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   285
target_link_libraries(consumer archiveExtras)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   286
.ft P
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   287
.fi
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   288
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   289
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   290
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   291
Because \fBarchive\fP is a \fBPUBLIC\fP dependency of \fBarchiveExtras\fP, the
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   292
usage requirements of it are propagated to \fBconsumer\fP too.  Because
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   293
\fBserialization\fP is a \fBPRIVATE\fP dependency of \fBarchive\fP, the usage
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   294
requirements of it are not propagated to \fBconsumer\fP\&.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   295
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   296
Generally, a dependency should be specified in a use of
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   297
\fBtarget_link_libraries()\fP with the \fBPRIVATE\fP keyword if it is used by
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   298
only the implementation of a library, and not in the header files.  If a
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   299
dependency is additionally used in the header files of a library (e.g. for
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   300
class inheritance), then it should be specified as a \fBPUBLIC\fP dependency.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   301
A dependency which is not used by the implementation of a library, but only by
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   302
its headers should be specified as an \fBINTERFACE\fP dependency.  The
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   303
\fBtarget_link_libraries()\fP command may be invoked with multiple uses of
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   304
each keyword:
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   305
.INDENT 0.0
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   306
.INDENT 3.5
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   307
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   308
.nf
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   309
.ft C
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   310
target_link_libraries(archiveExtras
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   311
  PUBLIC archive
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   312
  PRIVATE serialization
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   313
)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   314
.ft P
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   315
.fi
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   316
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   317
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   318
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   319
Usage requirements are propagated by reading the \fBINTERFACE_\fP variants
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   320
of target properties from dependencies and appending the values to the
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   321
non\-\fBINTERFACE_\fP variants of the operand.  For example, the
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   322
\fBINTERFACE_INCLUDE_DIRECTORIES\fP of dependencies is read and
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   323
appended to the \fBINCLUDE_DIRECTORIES\fP of the operand.  In cases
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   324
where order is relevant and maintained, and the order resulting from the
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   325
\fBtarget_link_libraries()\fP calls does not allow correct compilation,
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   326
use of an appropriate command to set the property directly may update the
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   327
order.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   328
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   329
For example, if the linked libraries for a target must be specified
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   330
in the order \fBlib1\fP \fBlib2\fP \fBlib3\fP , but the include directories must
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   331
be specified in the order \fBlib3\fP \fBlib1\fP \fBlib2\fP:
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   332
.INDENT 0.0
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   333
.INDENT 3.5
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   334
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   335
.nf
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   336
.ft C
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   337
target_link_libraries(myExe lib1 lib2 lib3)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   338
target_include_directories(myExe
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   339
  PRIVATE $<TARGET_PROPERTY:lib3,INTERFACE_INCLUDE_DIRECTORIES>)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   340
.ft P
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   341
.fi
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   342
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   343
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   344
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   345
Note that care must be taken when specifying usage requirements for targets
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   346
which will be exported for installation using the \fBinstall(EXPORT)\fP
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   347
command.  See Creating Packages for more.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   348
.SS Compatible Interface Properties
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   349
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   350
Some target properties are required to be compatible between a target and
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   351
the interface of each dependency.  For example, the
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   352
\fBPOSITION_INDEPENDENT_CODE\fP target property may specify a
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   353
boolean value of whether a target should be compiled as
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   354
position\-independent\-code, which has platform\-specific consequences.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   355
A target may also specify the usage requirement
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   356
\fBINTERFACE_POSITION_INDEPENDENT_CODE\fP to communicate that
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   357
consumers must be compiled as position\-independent\-code.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   358
.INDENT 0.0
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   359
.INDENT 3.5
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   360
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   361
.nf
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   362
.ft C
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   363
add_executable(exe1 exe1.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   364
set_property(TARGET exe1 PROPERTY POSITION_INDEPENDENT_CODE ON)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   365
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   366
add_library(lib1 SHARED lib1.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   367
set_property(TARGET lib1 PROPERTY INTERFACE_POSITION_INDEPENDENT_CODE ON)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   368
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   369
add_executable(exe2 exe2.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   370
target_link_libraries(exe2 lib1)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   371
.ft P
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   372
.fi
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   373
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   374
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   375
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   376
Here, both \fBexe1\fP and \fBexe2\fP will be compiled as position\-independent\-code.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   377
\fBlib1\fP will also be compiled as position\-independent\-code because that is the
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   378
default setting for \fBSHARED\fP libraries.  If dependencies have conflicting,
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   379
non\-compatible requirements \fBcmake(1)\fP issues a diagnostic:
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   380
.INDENT 0.0
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   381
.INDENT 3.5
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   382
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   383
.nf
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   384
.ft C
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   385
add_library(lib1 SHARED lib1.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   386
set_property(TARGET lib1 PROPERTY INTERFACE_POSITION_INDEPENDENT_CODE ON)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   387
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   388
add_library(lib2 SHARED lib2.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   389
set_property(TARGET lib2 PROPERTY INTERFACE_POSITION_INDEPENDENT_CODE OFF)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   390
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   391
add_executable(exe1 exe1.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   392
target_link_libraries(exe1 lib1)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   393
set_property(TARGET exe1 PROPERTY POSITION_INDEPENDENT_CODE OFF)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   394
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   395
add_executable(exe2 exe2.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   396
target_link_libraries(exe2 lib1 lib2)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   397
.ft P
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   398
.fi
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   399
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   400
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   401
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   402
The \fBlib1\fP requirement \fBINTERFACE_POSITION_INDEPENDENT_CODE\fP is not
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   403
"compatible" with the \fBPOSITION_INDEPENDENT_CODE\fP property of the \fBexe1\fP
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   404
target.  The library requires that consumers are built as
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   405
position\-independent\-code, while the executable specifies to not built as
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   406
position\-independent\-code, so a diagnostic is issued.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   407
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   408
The \fBlib1\fP and \fBlib2\fP requirements are not "compatible".  One of them
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   409
requires that consumers are built as position\-independent\-code, while
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   410
the other requires that consumers are not built as position\-independent\-code.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   411
Because \fBexe2\fP links to both and they are in conflict, a diagnostic is
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   412
issued.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   413
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   414
To be "compatible", the \fBPOSITION_INDEPENDENT_CODE\fP property,
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   415
if set must be either the same, in a boolean sense, as the
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   416
\fBINTERFACE_POSITION_INDEPENDENT_CODE\fP property of all transitively
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   417
specified dependencies on which that property is set.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   418
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   419
This property of "compatible interface requirement" may be extended to other
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   420
properties by specifying the property in the content of the
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   421
\fBCOMPATIBLE_INTERFACE_BOOL\fP target property.  Each specified property
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   422
must be compatible between the consuming target and the corresponding property
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   423
with an \fBINTERFACE_\fP prefix from each dependency:
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   424
.INDENT 0.0
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   425
.INDENT 3.5
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   426
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   427
.nf
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   428
.ft C
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   429
add_library(lib1Version2 SHARED lib1_v2.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   430
set_property(TARGET lib1Version2 PROPERTY INTERFACE_CUSTOM_PROP ON)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   431
set_property(TARGET lib1Version2 APPEND PROPERTY
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   432
  COMPATIBLE_INTERFACE_BOOL CUSTOM_PROP
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   433
)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   434
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   435
add_library(lib1Version3 SHARED lib1_v3.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   436
set_property(TARGET lib1Version3 PROPERTY INTERFACE_CUSTOM_PROP OFF)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   437
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   438
add_executable(exe1 exe1.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   439
target_link_libraries(exe1 lib1Version2) # CUSTOM_PROP will be ON
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   440
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   441
add_executable(exe2 exe2.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   442
target_link_libraries(exe2 lib1Version2 lib1Version3) # Diagnostic
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   443
.ft P
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   444
.fi
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   445
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   446
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   447
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   448
Non\-boolean properties may also participate in "compatible interface"
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   449
computations.  Properties specified in the
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   450
\fBCOMPATIBLE_INTERFACE_STRING\fP
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   451
property must be either unspecified or compare to the same string among
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   452
all transitively specified dependencies. This can be useful to ensure
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   453
that multiple incompatible versions of a library are not linked together
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   454
through transitive requirements of a target:
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   455
.INDENT 0.0
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   456
.INDENT 3.5
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   457
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   458
.nf
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   459
.ft C
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   460
add_library(lib1Version2 SHARED lib1_v2.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   461
set_property(TARGET lib1Version2 PROPERTY INTERFACE_LIB_VERSION 2)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   462
set_property(TARGET lib1Version2 APPEND PROPERTY
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   463
  COMPATIBLE_INTERFACE_STRING LIB_VERSION
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   464
)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   465
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   466
add_library(lib1Version3 SHARED lib1_v3.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   467
set_property(TARGET lib1Version3 PROPERTY INTERFACE_LIB_VERSION 3)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   468
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   469
add_executable(exe1 exe1.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   470
target_link_libraries(exe1 lib1Version2) # LIB_VERSION will be "2"
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   471
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   472
add_executable(exe2 exe2.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   473
target_link_libraries(exe2 lib1Version2 lib1Version3) # Diagnostic
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   474
.ft P
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   475
.fi
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   476
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   477
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   478
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   479
The \fBCOMPATIBLE_INTERFACE_NUMBER_MAX\fP target property specifies
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   480
that content will be evaluated numerically and the maximum number among all
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   481
specified will be calculated:
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   482
.INDENT 0.0
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   483
.INDENT 3.5
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   484
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   485
.nf
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   486
.ft C
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   487
add_library(lib1Version2 SHARED lib1_v2.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   488
set_property(TARGET lib1Version2 PROPERTY INTERFACE_CONTAINER_SIZE_REQUIRED 200)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   489
set_property(TARGET lib1Version2 APPEND PROPERTY
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   490
  COMPATIBLE_INTERFACE_NUMBER_MAX CONTAINER_SIZE_REQUIRED
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   491
)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   492
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   493
add_library(lib1Version3 SHARED lib1_v3.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   494
set_property(TARGET lib1Version2 PROPERTY INTERFACE_CONTAINER_SIZE_REQUIRED 1000)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   495
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   496
add_executable(exe1 exe1.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   497
# CONTAINER_SIZE_REQUIRED will be "200"
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   498
target_link_libraries(exe1 lib1Version2)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   499
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   500
add_executable(exe2 exe2.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   501
# CONTAINER_SIZE_REQUIRED will be "1000"
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   502
target_link_libraries(exe2 lib1Version2 lib1Version3)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   503
.ft P
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   504
.fi
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   505
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   506
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   507
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   508
Similarly, the \fBCOMPATIBLE_INTERFACE_NUMBER_MIN\fP may be used to
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   509
calculate the numeric minimum value for a property from dependencies.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   510
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   511
Each calculated "compatible" property value may be read in the consumer at
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   512
generate\-time using generator expressions.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   513
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   514
Note that for each dependee, the set of properties specified in each
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   515
compatible interface property must not intersect with the set specified in
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   516
any of the other properties.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   517
.SS Property Origin Debugging
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   518
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   519
Because build specifications can be determined by dependencies, the lack of
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   520
locality of code which creates a target and code which is responsible for
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   521
setting build specifications may make the code more difficult to reason about.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   522
\fBcmake(1)\fP provides a debugging facility to print the origin of the
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   523
contents of properties which may be determined by dependencies.  The properties
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   524
which can be debugged are listed in the
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   525
\fBCMAKE_DEBUG_TARGET_PROPERTIES\fP variable documentation:
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   526
.INDENT 0.0
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   527
.INDENT 3.5
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   528
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   529
.nf
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   530
.ft C
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   531
set(CMAKE_DEBUG_TARGET_PROPERTIES
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   532
  INCLUDE_DIRECTORIES
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   533
  COMPILE_DEFINITIONS
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   534
  POSITION_INDEPENDENT_CODE
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   535
  CONTAINER_SIZE_REQUIRED
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   536
  LIB_VERSION
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   537
)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   538
add_executable(exe1 exe1.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   539
.ft P
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   540
.fi
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   541
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   542
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   543
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   544
In the case of properties listed in \fBCOMPATIBLE_INTERFACE_BOOL\fP or
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   545
\fBCOMPATIBLE_INTERFACE_STRING\fP, the debug output shows which target
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   546
was responsible for setting the property, and which other dependencies also
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   547
defined the property.  In the case of
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   548
\fBCOMPATIBLE_INTERFACE_NUMBER_MAX\fP and
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   549
\fBCOMPATIBLE_INTERFACE_NUMBER_MIN\fP, the debug output shows the
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   550
value of the property from each dependency, and whether the value determines
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   551
the new extreme.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   552
.SS Build Specification with Generator Expressions
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   553
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   554
Build specifications may use
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   555
\fBgenerator expressions\fP containing
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   556
content which may be conditional or known only at generate\-time.  For example,
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   557
the calculated "compatible" value of a property may be read with the
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   558
\fBTARGET_PROPERTY\fP expression:
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   559
.INDENT 0.0
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   560
.INDENT 3.5
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   561
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   562
.nf
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   563
.ft C
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   564
add_library(lib1Version2 SHARED lib1_v2.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   565
set_property(TARGET lib1Version2 PROPERTY
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   566
  INTERFACE_CONTAINER_SIZE_REQUIRED 200)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   567
set_property(TARGET lib1Version2 APPEND PROPERTY
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   568
  COMPATIBLE_INTERFACE_NUMBER_MAX CONTAINER_SIZE_REQUIRED
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   569
)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   570
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   571
add_executable(exe1 exe1.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   572
target_link_libraries(exe1 lib1Version2)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   573
target_compile_definitions(exe1 PRIVATE
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   574
    CONTAINER_SIZE=$<TARGET_PROPERTY:CONTAINER_SIZE_REQUIRED>
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   575
)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   576
.ft P
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   577
.fi
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   578
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   579
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   580
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   581
In this case, the \fBexe1\fP source files will be compiled with
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   582
\fB\-DCONTAINER_SIZE=200\fP\&.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   583
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   584
Configuration determined build specifications may be conveniently set using
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   585
the \fBCONFIG\fP generator expression.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   586
.INDENT 0.0
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   587
.INDENT 3.5
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   588
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   589
.nf
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   590
.ft C
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   591
target_compile_definitions(exe1 PRIVATE
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   592
    $<$<CONFIG:Debug>:DEBUG_BUILD>
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   593
)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   594
.ft P
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   595
.fi
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   596
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   597
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   598
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   599
The \fBCONFIG\fP parameter is compared case\-insensitively with the configuration
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   600
being built.  In the presence of \fBIMPORTED\fP targets, the content of
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   601
\fBMAP_IMPORTED_CONFIG_DEBUG\fP is also
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   602
accounted for by this expression.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   603
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   604
Some buildsystems generated by \fBcmake(1)\fP have a predetermined
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   605
build\-configuration set in the \fBCMAKE_BUILD_TYPE\fP variable.  The
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   606
buildsystem for the IDEs such as Visual Studio and Xcode are generated
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   607
independent of the build\-configuration, and the actual build configuration
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   608
is not known until build\-time.  Therefore, code such as
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   609
.INDENT 0.0
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   610
.INDENT 3.5
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   611
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   612
.nf
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   613
.ft C
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   614
string(TOLOWER ${CMAKE_BUILD_TYPE} _type)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   615
if (_type STREQUAL debug)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   616
  target_compile_definitions(exe1 PRIVATE DEBUG_BUILD)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   617
endif()
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   618
.ft P
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   619
.fi
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   620
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   621
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   622
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   623
may appear to work for \fBMakefile\fP based and \fBNinja\fP generators, but is not
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   624
portable to IDE generators.  Additionally, the \fBIMPORTED\fP
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   625
configuration\-mappings are not accounted for with code like this, so it should
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   626
be avoided.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   627
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   628
The unary \fBTARGET_PROPERTY\fP generator expression and the \fBTARGET_POLICY\fP
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   629
generator expression are evaluated with the consuming target context.  This
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   630
means that a usage requirement specification may be evaluated differently based
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   631
on the consumer:
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   632
.INDENT 0.0
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   633
.INDENT 3.5
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   634
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   635
.nf
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   636
.ft C
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   637
add_library(lib1 lib1.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   638
target_compile_definitions(lib1 INTERFACE
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   639
  $<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>:LIB1_WITH_EXE>
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   640
  $<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,SHARED_LIBRARY>:LIB1_WITH_SHARED_LIB>
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   641
  $<$<TARGET_POLICY:CMP0041>:CONSUMER_CMP0041_NEW>
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   642
)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   643
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   644
add_executable(exe1 exe1.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   645
target_link_libraries(exe1 lib1)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   646
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   647
cmake_policy(SET CMP0041 NEW)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   648
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   649
add_library(shared_lib shared_lib.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   650
target_link_libraries(shared_lib lib1)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   651
.ft P
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   652
.fi
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   653
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   654
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   655
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   656
The \fBexe1\fP executable will be compiled with \fB\-DLIB1_WITH_EXE\fP, while the
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   657
\fBshared_lib\fP shared library will be compiled with \fB\-DLIB1_WITH_SHARED_LIB\fP
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   658
and \fB\-DCONSUMER_CMP0041_NEW\fP, because policy \fBCMP0041\fP is
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   659
\fBNEW\fP at the point where the \fBshared_lib\fP target is created.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   660
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   661
The \fBBUILD_INTERFACE\fP expression wraps requirements which are only used when
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   662
consumed from a target in the same buildsystem, or when consumed from a target
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   663
exported to the build directory using the \fBexport()\fP command.  The
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   664
\fBINSTALL_INTERFACE\fP expression wraps requirements which are only used when
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   665
consumed from a target which has been installed and exported with the
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   666
\fBinstall(EXPORT)\fP command:
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   667
.INDENT 0.0
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   668
.INDENT 3.5
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   669
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   670
.nf
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   671
.ft C
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   672
add_library(ClimbingStats climbingstats.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   673
target_compile_definitions(ClimbingStats INTERFACE
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   674
  $<BUILD_INTERFACE:ClimbingStats_FROM_BUILD_LOCATION>
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   675
  $<INSTALL_INTERFACE:ClimbingStats_FROM_INSTALLED_LOCATION>
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   676
)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   677
install(TARGETS ClimbingStats EXPORT libExport ${InstallArgs})
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   678
install(EXPORT libExport NAMESPACE Upstream::
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   679
        DESTINATION lib/cmake/ClimbingStats)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   680
export(EXPORT libExport NAMESPACE Upstream::)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   681
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   682
add_executable(exe1 exe1.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   683
target_link_libraries(exe1 ClimbingStats)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   684
.ft P
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   685
.fi
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   686
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   687
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   688
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   689
In this case, the \fBexe1\fP executable will be compiled with
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   690
\fB\-DClimbingStats_FROM_BUILD_LOCATION\fP\&.  The exporting commands generate
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   691
\fBIMPORTED\fP targets with either the \fBINSTALL_INTERFACE\fP or the
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   692
\fBBUILD_INTERFACE\fP omitted, and the \fB*_INTERFACE\fP marker stripped away.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   693
A separate project consuming the \fBClimbingStats\fP package would contain:
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   694
.INDENT 0.0
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   695
.INDENT 3.5
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   696
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   697
.nf
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   698
.ft C
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   699
find_package(ClimbingStats REQUIRED)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   700
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   701
add_executable(Downstream main.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   702
target_link_libraries(Downstream Upstream::ClimbingStats)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   703
.ft P
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   704
.fi
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   705
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   706
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   707
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   708
Depending on whether the \fBClimbingStats\fP package was used from the build
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   709
location or the install location, the \fBDownstream\fP target would be compiled
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   710
with either \fB\-DClimbingStats_FROM_BUILD_LOCATION\fP or
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   711
\fB\-DClimbingStats_FROM_INSTALL_LOCATION\fP\&.  For more about packages and
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   712
exporting see the \fBcmake\-packages(7)\fP manual.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   713
.SS Include Directories and Usage Requirements
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   714
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   715
Include directories require some special consideration when specified as usage
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   716
requirements and when used with generator expressions.  The
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   717
\fBtarget_include_directories()\fP command accepts both relative and
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   718
absolute include directories:
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   719
.INDENT 0.0
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   720
.INDENT 3.5
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   721
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   722
.nf
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   723
.ft C
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   724
add_library(lib1 lib1.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   725
target_include_directories(lib1 PRIVATE
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   726
  /absolute/path
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   727
  relative/path
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   728
)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   729
.ft P
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   730
.fi
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   731
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   732
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   733
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   734
Relative paths are interpreted relative to the source directory where the
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   735
command appears.  Relative paths are not allowed in the
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   736
\fBINTERFACE_INCLUDE_DIRECTORIES\fP of \fBIMPORTED\fP targets.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   737
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   738
In cases where a non\-trivial generator expression is used, the
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   739
\fBINSTALL_PREFIX\fP expression may be used within the argument of an
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   740
\fBINSTALL_INTERFACE\fP expression.  It is a replacement marker which
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   741
expands to the installation prefix when imported by a consuming project.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   742
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   743
Include directories usage requirements commonly differ between the build\-tree
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   744
and the install\-tree.  The \fBBUILD_INTERFACE\fP and \fBINSTALL_INTERFACE\fP
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   745
generator expressions can be used to describe separate usage requirements
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   746
based on the usage location.  Relative paths are allowed within the
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   747
\fBINSTALL_INTERFACE\fP expression and are interpreted relative to the
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   748
installation prefix.  For example:
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   749
.INDENT 0.0
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   750
.INDENT 3.5
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   751
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   752
.nf
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   753
.ft C
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   754
add_library(ClimbingStats climbingstats.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   755
target_include_directories(ClimbingStats INTERFACE
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   756
  $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/generated>
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   757
  $<INSTALL_INTERFACE:/absolute/path>
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   758
  $<INSTALL_INTERFACE:relative/path>
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   759
  $<INSTALL_INTERFACE:$<INSTALL_PREFIX>/$<CONFIG>/generated>
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   760
)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   761
.ft P
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   762
.fi
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   763
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   764
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   765
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   766
Two convenience APIs are provided relating to include directories usage
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   767
requirements.  The \fBCMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE\fP variable
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   768
may be enabled, with an equivalent effect to:
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   769
.INDENT 0.0
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   770
.INDENT 3.5
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   771
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   772
.nf
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   773
.ft C
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   774
set_property(TARGET tgt APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   775
  $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR};${CMAKE_CURRENT_BINARY_DIR}>
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   776
)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   777
.ft P
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   778
.fi
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   779
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   780
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   781
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   782
for each target affected.  The convenience for installed targets is
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   783
an \fBINCLUDES DESTINATION\fP component with the \fBinstall(TARGETS)\fP
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   784
command:
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   785
.INDENT 0.0
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   786
.INDENT 3.5
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   787
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   788
.nf
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   789
.ft C
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   790
install(TARGETS foo bar bat EXPORT tgts ${dest_args}
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   791
  INCLUDES DESTINATION include
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   792
)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   793
install(EXPORT tgts ${other_args})
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   794
install(FILES ${headers} DESTINATION include)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   795
.ft P
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   796
.fi
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   797
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   798
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   799
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   800
This is equivalent to appending \fB${CMAKE_INSTALL_PREFIX}/include\fP to the
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   801
\fBINTERFACE_INCLUDE_DIRECTORIES\fP of each of the installed
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   802
\fBIMPORTED\fP targets when generated by \fBinstall(EXPORT)\fP\&.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   803
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   804
When the \fBINTERFACE_INCLUDE_DIRECTORIES\fP of an
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   805
\fI\%imported target\fP is consumed, the entries in the
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   806
property are treated as \fBSYSTEM\fP include directories, as if they were
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   807
listed in the \fBINTERFACE_SYSTEM_INCLUDE_DIRECTORIES\fP of the
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   808
dependency. This can result in omission of compiler warnings for headers
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   809
found in those directories.  This behavior for \fI\%Imported Targets\fP may
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   810
be controlled with the \fBNO_SYSTEM_FROM_IMPORTED\fP target property.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   811
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   812
If a binary target is linked transitively to a Mac OX framework, the
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   813
\fBHeaders\fP directory of the framework is also treated as a usage requirement.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   814
This has the same effect as passing the framework directory as an include
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   815
directory.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   816
.SS Link Libraries and Generator Expressions
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   817
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   818
Like build specifications, \fBlink libraries\fP may be
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   819
specified with generator expression conditions.  However, as consumption of
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   820
usage requirements is based on collection from linked dependencies, there is
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   821
an additional limitation that the link dependencies must form a "directed
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   822
acyclic graph".  That is, if linking to a target is dependent on the value of
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   823
a target property, that target property may not be dependent on the linked
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   824
dependencies:
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   825
.INDENT 0.0
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   826
.INDENT 3.5
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   827
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   828
.nf
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   829
.ft C
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   830
add_library(lib1 lib1.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   831
add_library(lib2 lib2.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   832
target_link_libraries(lib1 PUBLIC
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   833
  $<$<TARGET_PROPERTY:POSITION_INDEPENDENT_CODE>:lib2>
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   834
)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   835
add_library(lib3 lib3.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   836
set_property(TARGET lib3 PROPERTY INTERFACE_POSITION_INDEPENDENT_CODE ON)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   837
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   838
add_executable(exe1 exe1.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   839
target_link_libraries(exe1 lib1 lib3)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   840
.ft P
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   841
.fi
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   842
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   843
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   844
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   845
As the value of the \fBPOSITION_INDEPENDENT_CODE\fP property of
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   846
the \fBexe1\fP target is dependent on the linked libraries (\fBlib3\fP), and the
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   847
edge of linking \fBexe1\fP is determined by the same
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   848
\fBPOSITION_INDEPENDENT_CODE\fP property, the dependency graph above
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   849
contains a cycle.  \fBcmake(1)\fP issues a diagnostic in this case.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   850
.SS Output Artifacts
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   851
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   852
The buildsystem targets created by the \fBadd_library()\fP and
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   853
\fBadd_executable()\fP commands create rules to create binary outputs.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   854
The exact output location of the binaries can only be determined at
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   855
generate\-time because it can depend on the build\-configuration and the
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   856
link\-language of linked dependencies etc.  \fBTARGET_FILE\fP,
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   857
\fBTARGET_LINKER_FILE\fP and related expressions can be used to access the
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   858
name and location of generated binaries.  These expressions do not work
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   859
for \fBOBJECT\fP libraries however, as there is no single file generated
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   860
by such libraries which is relevant to the expressions.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   861
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   862
There are three kinds of output artifacts that may be build by targets
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   863
as detailed in the following sections.  Their classification differs
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   864
between DLL platforms and non\-DLL platforms.  All Windows\-based
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   865
systems including Cygwin are DLL platforms.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   866
.SS Runtime Output Artifacts
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   867
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   868
A \fIruntime\fP output artifact of a buildsystem target may be:
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   869
.INDENT 0.0
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   870
.IP \(bu 2
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   871
The executable file (e.g. \fB\&.exe\fP) of an executable target
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   872
created by the \fBadd_executable()\fP command.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   873
.IP \(bu 2
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   874
On DLL platforms: the executable file (e.g. \fB\&.dll\fP) of a shared
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   875
library target created by the \fBadd_library()\fP command
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   876
with the \fBSHARED\fP option.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   877
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   878
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   879
The \fBRUNTIME_OUTPUT_DIRECTORY\fP and \fBRUNTIME_OUTPUT_NAME\fP
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   880
target properties may be used to control runtime output artifact locations
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   881
and names in the build tree.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   882
.SS Library Output Artifacts
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   883
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   884
A \fIlibrary\fP output artifact of a buildsystem target may be:
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   885
.INDENT 0.0
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   886
.IP \(bu 2
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   887
The loadable module file (e.g. \fB\&.dll\fP or \fB\&.so\fP) of a module
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   888
library target created by the \fBadd_library()\fP command
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   889
with the \fBMODULE\fP option.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   890
.IP \(bu 2
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   891
On non\-DLL platforms: the shared library file (e.g. \fB\&.so\fP or \fB\&.dylib\fP)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   892
of a shared shared library target created by the \fBadd_library()\fP
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   893
command with the \fBSHARED\fP option.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   894
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   895
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   896
The \fBLIBRARY_OUTPUT_DIRECTORY\fP and \fBLIBRARY_OUTPUT_NAME\fP
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   897
target properties may be used to control library output artifact locations
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   898
and names in the build tree.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   899
.SS Archive Output Artifacts
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   900
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   901
An \fIarchive\fP output artifact of a buildsystem target may be:
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   902
.INDENT 0.0
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   903
.IP \(bu 2
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   904
The static library file (e.g. \fB\&.lib\fP or \fB\&.a\fP) of a static
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   905
library target created by the \fBadd_library()\fP command
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   906
with the \fBSTATIC\fP option.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   907
.IP \(bu 2
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   908
On DLL platforms: the import library file (e.g. \fB\&.lib\fP) of a shared
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   909
library target created by the \fBadd_library()\fP command
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   910
with the \fBSHARED\fP option.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   911
.IP \(bu 2
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   912
On DLL platforms: the import library file (e.g. \fB\&.lib\fP) of an
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   913
executable target created by the \fBadd_executable()\fP command
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   914
when its \fBENABLE_EXPORTS\fP target property is set.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   915
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   916
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   917
The \fBARCHIVE_OUTPUT_DIRECTORY\fP and \fBARCHIVE_OUTPUT_NAME\fP
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   918
target properties may be used to control archive output artifact locations
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   919
and names in the build tree.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   920
.SS Directory\-Scoped Commands
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   921
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   922
The \fBtarget_include_directories()\fP,
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   923
\fBtarget_compile_definitions()\fP and
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   924
\fBtarget_compile_options()\fP commands have an effect on only one
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   925
target at a time.  The commands \fBadd_definitions()\fP,
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   926
\fBadd_compile_options()\fP and \fBinclude_directories()\fP have
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   927
a similar function, but operate at directory scope instead of target
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   928
scope for convenience.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   929
.SH PSEUDO TARGETS
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   930
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   931
Some target types do not represent outputs of the buildsystem, but only inputs
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   932
such as external dependencies, aliases or other non\-build artifacts.  Pseudo
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   933
targets are not represented in the generated buildsystem.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   934
.SS Imported Targets
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   935
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   936
An \fBIMPORTED\fP target represents a pre\-existing dependency.  Usually
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   937
such targets are defined by an upstream package and should be treated as
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   938
immutable.  It is not possible to use an \fBIMPORTED\fP target in the
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   939
left\-hand\-side of the \fBtarget_compile_definitions()\fP,
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   940
\fBtarget_include_directories()\fP, \fBtarget_compile_options()\fP or
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   941
\fBtarget_link_libraries()\fP commands, as that would be an attempt to
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   942
modify it.  \fBIMPORTED\fP targets are designed to be used only in the
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   943
right\-hand\-side of those commands.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   944
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   945
\fBIMPORTED\fP targets may have the same usage requirement properties
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   946
populated as binary targets, such as
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   947
\fBINTERFACE_INCLUDE_DIRECTORIES\fP,
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   948
\fBINTERFACE_COMPILE_DEFINITIONS\fP,
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   949
\fBINTERFACE_COMPILE_OPTIONS\fP,
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   950
\fBINTERFACE_LINK_LIBRARIES\fP, and
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   951
\fBINTERFACE_POSITION_INDEPENDENT_CODE\fP\&.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   952
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   953
The \fBLOCATION\fP may also be read from an IMPORTED target, though there
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   954
is rarely reason to do so.  Commands such as \fBadd_custom_command()\fP can
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   955
transparently use an \fBIMPORTED\fP \fBEXECUTABLE\fP target
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   956
as a \fBCOMMAND\fP executable.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   957
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   958
The scope of the definition of an \fBIMPORTED\fP target is the directory
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   959
where it was defined.  It may be accessed and used from subdirectories, but
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   960
not from parent directories or sibling directories.  The scope is similar to
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   961
the scope of a cmake variable.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   962
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   963
It is also possible to define a \fBGLOBAL\fP \fBIMPORTED\fP target which is
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   964
accessible globally in the buildsystem.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   965
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   966
See the \fBcmake\-packages(7)\fP manual for more on creating packages
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   967
with \fBIMPORTED\fP targets.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   968
.SS Alias Targets
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   969
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   970
An \fBALIAS\fP target is a name which may be used interchangably with
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   971
a binary target name in read\-only contexts.  A primary use\-case for \fBALIAS\fP
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   972
targets is for example or unit test executables accompanying a library, which
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   973
may be part of the same buildsystem or built separately based on user
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   974
configuration.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   975
.INDENT 0.0
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   976
.INDENT 3.5
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   977
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   978
.nf
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   979
.ft C
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   980
add_library(lib1 lib1.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   981
install(TARGETS lib1 EXPORT lib1Export ${dest_args})
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   982
install(EXPORT lib1Export NAMESPACE Upstream:: ${other_args})
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   983
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   984
add_library(Upstream::lib1 ALIAS lib1)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   985
.ft P
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   986
.fi
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   987
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   988
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   989
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   990
In another directory, we can link unconditionally to the \fBUpstream::lib1\fP
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   991
target, which may be an \fBIMPORTED\fP target from a package, or an
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   992
\fBALIAS\fP target if built as part of the same buildsystem.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   993
.INDENT 0.0
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   994
.INDENT 3.5
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   995
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   996
.nf
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   997
.ft C
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   998
if (NOT TARGET Upstream::lib1)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
   999
  find_package(lib1 REQUIRED)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1000
endif()
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1001
add_executable(exe1 exe1.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1002
target_link_libraries(exe1 Upstream::lib1)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1003
.ft P
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1004
.fi
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1005
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1006
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1007
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1008
\fBALIAS\fP targets are not mutable, installable or exportable.  They are
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1009
entirely local to the buildsystem description.  A name can be tested for
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1010
whether it is an \fBALIAS\fP name by reading the \fBALIASED_TARGET\fP
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1011
property from it:
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1012
.INDENT 0.0
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1013
.INDENT 3.5
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1014
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1015
.nf
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1016
.ft C
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1017
get_target_property(_aliased Upstream::lib1 ALIASED_TARGET)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1018
if(_aliased)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1019
  message(STATUS "The name Upstream::lib1 is an ALIAS for ${_aliased}.")
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1020
endif()
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1021
.ft P
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1022
.fi
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1023
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1024
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1025
.SS Interface Libraries
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1026
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1027
An \fBINTERFACE\fP target has no \fBLOCATION\fP and is mutable, but is
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1028
otherwise similar to an \fBIMPORTED\fP target.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1029
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1030
It may specify usage requirements such as
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1031
\fBINTERFACE_INCLUDE_DIRECTORIES\fP,
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1032
\fBINTERFACE_COMPILE_DEFINITIONS\fP,
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1033
\fBINTERFACE_COMPILE_OPTIONS\fP,
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1034
\fBINTERFACE_LINK_LIBRARIES\fP,
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1035
\fBINTERFACE_SOURCES\fP,
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1036
and \fBINTERFACE_POSITION_INDEPENDENT_CODE\fP\&.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1037
Only the \fBINTERFACE\fP modes of the \fBtarget_include_directories()\fP,
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1038
\fBtarget_compile_definitions()\fP, \fBtarget_compile_options()\fP,
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1039
\fBtarget_sources()\fP, and \fBtarget_link_libraries()\fP commands
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1040
may be used with \fBINTERFACE\fP libraries.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1041
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1042
A primary use\-case for \fBINTERFACE\fP libraries is header\-only libraries.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1043
.INDENT 0.0
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1044
.INDENT 3.5
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1045
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1046
.nf
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1047
.ft C
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1048
add_library(Eigen INTERFACE)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1049
target_include_directories(Eigen INTERFACE
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1050
  $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1051
  $<INSTALL_INTERFACE:include/Eigen>
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1052
)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1053
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1054
add_executable(exe1 exe1.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1055
target_link_libraries(exe1 Eigen)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1056
.ft P
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1057
.fi
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1058
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1059
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1060
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1061
Here, the usage requirements from the \fBEigen\fP target are consumed and used
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1062
when compiling, but it has no effect on linking.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1063
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1064
Another use\-case is to employ an entirely target\-focussed design for usage
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1065
requirements:
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1066
.INDENT 0.0
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1067
.INDENT 3.5
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1068
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1069
.nf
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1070
.ft C
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1071
add_library(pic_on INTERFACE)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1072
set_property(TARGET pic_on PROPERTY INTERFACE_POSITION_INDEPENDENT_CODE ON)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1073
add_library(pic_off INTERFACE)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1074
set_property(TARGET pic_off PROPERTY INTERFACE_POSITION_INDEPENDENT_CODE OFF)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1075
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1076
add_library(enable_rtti INTERFACE)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1077
target_compile_options(enable_rtti INTERFACE
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1078
  $<$<OR:$<COMPILER_ID:GNU>,$<COMPILER_ID:Clang>>:\-rtti>
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1079
)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1080
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1081
add_executable(exe1 exe1.cpp)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1082
target_link_libraries(exe1 pic_on enable_rtti)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1083
.ft P
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1084
.fi
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1085
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1086
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1087
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1088
This way, the build specification of \fBexe1\fP is expressed entirely as linked
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1089
targets, and the complexity of compiler\-specific flags is encapsulated in an
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1090
\fBINTERFACE\fP library target.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1091
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1092
The properties permitted to be set on or read from an \fBINTERFACE\fP library
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1093
are:
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1094
.INDENT 0.0
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1095
.IP \(bu 2
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1096
Properties matching \fBINTERFACE_*\fP
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1097
.IP \(bu 2
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1098
Built\-in properties matching \fBCOMPATIBLE_INTERFACE_*\fP
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1099
.IP \(bu 2
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1100
\fBEXPORT_NAME\fP
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1101
.IP \(bu 2
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1102
\fBIMPORTED\fP
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1103
.IP \(bu 2
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1104
\fBNAME\fP
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1105
.IP \(bu 2
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1106
Properties matching \fBMAP_IMPORTED_CONFIG_*\fP
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1107
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1108
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1109
\fBINTERFACE\fP libraries may be installed and exported.  Any content they refer
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1110
to must be installed separately:
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1111
.INDENT 0.0
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1112
.INDENT 3.5
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1113
.sp
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1114
.nf
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1115
.ft C
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1116
add_library(Eigen INTERFACE)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1117
target_include_directories(Eigen INTERFACE
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1118
  $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1119
  $<INSTALL_INTERFACE:include/Eigen>
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1120
)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1121
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1122
install(TARGETS Eigen EXPORT eigenExport)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1123
install(EXPORT eigenExport NAMESPACE Upstream::
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1124
  DESTINATION lib/cmake/Eigen
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1125
)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1126
install(FILES
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1127
    ${CMAKE_CURRENT_SOURCE_DIR}/src/eigen.h
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1128
    ${CMAKE_CURRENT_SOURCE_DIR}/src/vector.h
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1129
    ${CMAKE_CURRENT_SOURCE_DIR}/src/matrix.h
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1130
  DESTINATION include/Eigen
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1131
)
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1132
.ft P
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1133
.fi
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1134
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1135
.UNINDENT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1136
.SH COPYRIGHT
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1137
2000-2015 Kitware, Inc.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1138
.\" Generated by docutils manpage writer.
198d4a3e4b73 21834219 update cmake to 3.3.2
April Chin <april.chin@oracle.com>
parents:
diff changeset
  1139
.