author | April Chin <april.chin@oracle.com> |
Wed, 11 Nov 2015 12:06:59 -0800 | |
changeset 5081 | 198d4a3e4b73 |
permissions | -rw-r--r-- |
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 |
. |