1CMAKE-POLICIES(7) CMake CMAKE-POLICIES(7)
2
3
4
6 cmake-policies - CMake Policies Reference
7
9 Policies in CMake are used to preserve backward compatible behavior
10 across multiple releases. When a new policy is introduced, newer CMake
11 versions will begin to warn about the backward compatible behavior. It
12 is possible to disable the warning by explicitly requesting the OLD, or
13 backward compatible behavior using the cmake_policy() command. It is
14 also possible to request NEW, or non-backward compatible behavior for a
15 policy, also avoiding the warning. Each policy can also be set to
16 either NEW or OLD behavior explicitly on the command line with the
17 CMAKE_POLICY_DEFAULT_CMP<NNNN> variable.
18
19 A policy is a deprecation mechanism and not a reliable feature toggle.
20 A policy should almost never be set to OLD, except to silence warnings
21 in an otherwise frozen or stable codebase, or temporarily as part of a
22 larger migration path. The OLD behavior of each policy is undesirable
23 and will be replaced with an error condition in a future release.
24
25 The cmake_minimum_required() command does more than report an error if
26 a too-old version of CMake is used to build a project. It also sets
27 all policies introduced in that CMake version or earlier to NEW behav‐
28 ior. To manage policies without increasing the minimum required CMake
29 version, the if(POLICY) command may be used:
30
31 if(POLICY CMP0990)
32 cmake_policy(SET CMP0990 NEW)
33 endif()
34
35 This has the effect of using the NEW behavior with newer CMake releases
36 which users may be using and not issuing a compatibility warning.
37
38 The setting of a policy is confined in some cases to not propagate to
39 the parent scope. For example, if the files read by the include() com‐
40 mand or the find_package() command contain a use of cmake_policy(),
41 that policy setting will not affect the caller by default. Both com‐
42 mands accept an optional NO_POLICY_SCOPE keyword to control this behav‐
43 ior.
44
45 The CMAKE_MINIMUM_REQUIRED_VERSION variable may also be used to deter‐
46 mine whether to report an error on use of deprecated macros or func‐
47 tions.
48
50 CMP0114
51 New in version 3.19.
52
53
54 ExternalProject step targets fully adopt their steps.
55
56 The ExternalProject_Add() STEP_TARGETS option, and the ExternalPro‐
57 ject_Add_StepTargets() function, can be used to create build targets
58 for individual steps of an external project.
59
60 In CMake 3.18 and below, step targets have some limitations:
61
62 · Step targets always depend on targets named by the ExternalPro‐
63 ject_Add() DEPENDS option even though not all steps need them. In
64 order to allow step targets to be created without those dependencies,
65 the ExternalProject_Add() INDEPENDENT_STEP_TARGETS option or the
66 ExternalProject_Add_StepTargets() NO_DEPENDS option may be used.
67 However, adding such “independent” step targets makes sense only for
68 specific steps such as download, update, and patch because they do
69 not need any of the external project’s build dependencies. Further‐
70 more, it does not make sense to create independent step targets for
71 steps that depend on non-independent steps. Such rules are not
72 enforced, and projects that do not follow them can generate build
73 systems with confusing and generator-specific behavior.
74
75 · Step targets hold copies of the custom commands implementing their
76 steps that are separate from the copies in the primary target created
77 by ExternalProject_Add(), and the primary target does not depend on
78 the step targets. In parallel builds that drive the primary target
79 and step targets concurrently, multiple copies of the steps’ commands
80 may run concurrently and race each other.
81
82 Also, prior to policy CMP0113, the step targets generated by Makefile
83 Generators also contain all the custom commands on which their step
84 depends. This can lead to repeated execution of those steps even in
85 serial builds.
86
87 In CMake 3.19 and above, the ExternalProject module prefers a revised
88 design to address these problems:
89
90 · Each step is classified as “independent” if it does not depend on
91 other targets named by the ExternalProject_Add() DEPENDS. The prede‐
92 fined steps are automatically classified by default:
93
94 · The download, update, and patch steps are independent.
95
96 · The configure, build, test, and install steps are not.
97
98 For custom steps, the ExternalProject_Add_Step() command provides an
99 INDEPENDENT option to mark them as independent. It is an error to
100 mark a step as independent if it depends on other steps that are not.
101 Note that this use of the term “independent” refers only to indepen‐
102 dence from external targets and is orthogonal to a step’s dependen‐
103 cies on other steps.
104
105 · Step targets created by the ExternalProject_Add() STEP_TARGETS option
106 or the ExternalProject_Add_Step() function are now independent if and
107 only if their steps are marked as independent. The ExternalPro‐
108 ject_Add() INDEPENDENT_STEP_TARGETS option and ExternalPro‐
109 ject_Add_StepTargets() NO_DEPENDS option are no longer allowed.
110
111 · Step targets, when created, are fully responsible for holding the
112 custom commands implementing their steps. The primary target created
113 by ExternalProject_Add() depends on the step targets, and the step
114 targets depend on each other. The target-level dependencies match
115 the file-level dependencies used by the custom commands for each
116 step.
117
118 When the ExternalProject_Add() UPDATE_DISCONNECTED or
119 TEST_EXCLUDE_FROM_MAIN option is used, or the ExternalPro‐
120 ject_Add_Step() EXCLUDE_FROM_MAIN option is used for a custom step,
121 some step targets may be created automatically. These are needed to
122 hold the steps commonly depended upon by the primary target and the
123 disconnected step targets.
124
125 Policy CMP0114 provides compatibility for projects that have not been
126 updated to expect the new behavior. The OLD behavior for this policy
127 is to use the above-documented behavior from 3.18 and below. The NEW
128 behavior for this policy is to use the above-documented behavior pre‐
129 ferred by 3.19 and above.
130
131 This policy was introduced in CMake version 3.19. CMake version 3.19.7
132 warns when the policy is not set and uses OLD behavior. Use the
133 cmake_policy() command to set it to OLD or NEW explicitly.
134
135 CMP0113
136 New in version 3.19.
137
138
139 Makefile Generators do not repeat custom commands from target dependen‐
140 cies.
141
142 Consider a chain of custom commands split across two dependent targets:
143
144 add_custom_command(OUTPUT output-not-created
145 COMMAND ... DEPENDS ...)
146 set_property(SOURCE output-not-created PROPERTY SYMBOLIC 1)
147 add_custom_command(OUTPUT output-created
148 COMMAND ... DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/output-not-created)
149 add_custom_target(first DEPENDS output-not-created)
150 add_custom_target(second DEPENDS output-created)
151 add_dependencies(second first)
152
153 In CMake 3.18 and lower, the Makefile generators put a copy of both
154 custom commands in the Makefile for target second even though its
155 dependency on target first ensures that the first custom command runs
156 before the second. Running make second would cause the first custom
157 command to run once in the first target and then again in the second
158 target.
159
160 CMake 3.19 and above prefer to not duplicate custom commands in a tar‐
161 get that are already generated in other targets on which the target
162 depends (directly or indirectly). This policy provides compatibility
163 for projects that have not been updated to expect the new behavior. In
164 particular, projects that relied on the duplicate execution or that did
165 not properly set the SYMBOLIC source file property may be affected.
166
167 The OLD behavior for this policy is to duplicate custom commands in
168 dependent targets. The NEW behavior of this policy is to not duplicate
169 custom commands in dependent targets.
170
171 This policy was introduced in CMake version 3.19. Unlike many poli‐
172 cies, CMake version 3.19.7 does not warn when this policy is not set
173 and simply uses OLD behavior.
174
175 NOTE:
176 The OLD behavior of a policy is deprecated by definition and may be
177 removed in a future version of CMake.
178
179 CMP0112
180 New in version 3.19.
181
182
183 Target file component generator expressions do not add target dependen‐
184 cies.
185
186 The following target-based generator expressions that query for direc‐
187 tory or file name components no longer add a dependency on the evalu‐
188 ated target.
189
190 · TARGET_FILE_NAME
191
192 · TARGET_FILE_DIR
193
194 · TARGET_LINKER_FILE_BASE_NAME
195
196 · TARGET_LINKER_FILE_NAME
197
198 · TARGET_LINKER_FILE_DIR
199
200 · TARGET_SONAME_FILE_NAME
201
202 · TARGET_SONAME_FILE_DIR
203
204 · TARGET_PDB_FILE_NAME
205
206 · TARGET_PDB_FILE_DIR
207
208 · TARGET_BUNDLE_DIR
209
210 · TARGET_BUNDLE_CONTENT_DIR
211
212 In CMake 3.18 and lower a dependency on the evaluated target of the
213 above generator expressions would always be added. CMake 3.19 and
214 above prefer to not add this dependency. This policy provides compati‐
215 bility for projects that have not been updated to expect the new behav‐
216 ior.
217
218 The OLD behavior for this policy is to add a dependency on the evalu‐
219 ated target for the above generator expressions. The NEW behavior of
220 this policy is to not add a dependency on the evaluated target for the
221 above generator expressions.
222
223 This policy was introduced in CMake version 3.19. Unlike many poli‐
224 cies, CMake version 3.19.7 does not warn by default when this policy is
225 not set and simply uses OLD behavior. See documentation of the
226 CMAKE_POLICY_WARNING_CMP0112 variable to control the warning.
227
228 NOTE:
229 The OLD behavior of a policy is deprecated by definition and may be
230 removed in a future version of CMake.
231
232 CMP0111
233 New in version 3.19.
234
235
236 An imported target missing its location property fails during genera‐
237 tion.
238
239 Imported Targets for library files and executables require that their
240 location on disk is specified in a target property such as
241 IMPORTED_LOCATION, IMPORTED_IMPLIB, or a per-configuration equivalent.
242 If a needed location property is not set, CMake 3.18 and below generate
243 the string <TARGET_NAME>-NOTFOUND in its place, which results in fail‐
244 ures of the corresponding rules at build time. CMake 3.19 and above
245 prefer instead to raise an error during generation. This policy pro‐
246 vides compatibility for projects that have not been updated to expect
247 the new behavior.
248
249 The OLD behavior of this policy is to generate the location of an
250 imported unknown, static or shared library target as <TARGET_NAME>-NOT‐
251 FOUND if not set. The NEW behavior is to raise an error.
252
253 This policy was introduced in CMake version 3.19. CMake version 3.19.7
254 warns when the policy is not set and uses OLD behavior. Use the
255 cmake_policy() command to set it to OLD or NEW explicitly.
256
257 NOTE:
258 The OLD behavior of a policy is deprecated by definition and may be
259 removed in a future version of CMake.
260
261 CMP0110
262 New in version 3.19.
263
264
265 add_test() supports arbitrary characters in test names.
266
267 add_test() can now (officially) create tests with whitespace and other
268 special characters in its name. Before CMake version 3.19 that was not
269 allowed, however, it was possible to work around this limitation by
270 explicitly putting escaped quotes arount the test’s name in the
271 add_test command.
272
273 Although never officially supported several projects in the wild found
274 and implemented this workaround. However, the new change which offi‐
275 cially allows the add_test command to support whitespace and other spe‐
276 cial characters in test names now breaks that workaround. In order for
277 these projects to work smoothly with newer CMake versions, this policy
278 was introduced.
279
280 The OLD behavior of this policy is to still prevent add_test from han‐
281 dling whitespace and special characters properly (if not using the men‐
282 tioned workaround). The NEW behavior on the other hand allows names
283 with whitespace and special characters for tests created by add_test.
284
285 This policy was introduced in CMake version 3.19. CMake version 3.19.7
286 warns when the policy is not set and uses OLD behavior. Use the
287 cmake_policy() command to set it to OLD or NEW explicitly.
288
289 CMP0109
290 New in version 3.19.
291
292
293 find_program() requires permission to execute but not to read.
294
295 In CMake 3.18 and below, the find_program() command on UNIX would find
296 files that are readable without requiring execute permission, and would
297 not find files that are executable without read permission. In CMake
298 3.19 and above, find_program now prefers to require execute permission
299 but not read permission. This policy provides compatibility with
300 projects that have not been updated to expect the new behavior.
301
302 The OLD behavior for this policy is for find_program to require read
303 permission but not execute permission. The NEW behavior for this pol‐
304 icy is for find_program to require execute permission but not read per‐
305 mission.
306
307 This policy was introduced in CMake version 3.19. CMake version 3.19.7
308 warns when the policy is not set and uses OLD behavior. Use the
309 cmake_policy() command to set it to OLD or NEW explicitly.
310
311 NOTE:
312 The OLD behavior of a policy is deprecated by definition and may be
313 removed in a future version of CMake.
314
316 CMP0108
317 New in version 3.18.
318
319
320 A target is not allowed to link to itself even through an ALIAS target.
321
322 In CMake 3.17 and below, a target can link to a target aliased to
323 itself.
324
325 The OLD behavior for this policy is to allow a target to link to a tar‐
326 get aliased to itself.
327
328 The NEW behavior of this policy is to prevent a target to link to
329 itself through an ALIAS target.
330
331 This policy was introduced in CMake version 3.17. Use the cmake_pol‐
332 icy() command to set it to OLD or NEW explicitly. Unlike many poli‐
333 cies, CMake version 3.19.7 does not warn when this policy is not set
334 and simply uses OLD behavior.
335
336 NOTE:
337 The OLD behavior of a policy is deprecated by definition and may be
338 removed in a future version of CMake.
339
340 CMP0107
341 New in version 3.18.
342
343
344 It is not allowed to create an ALIAS target with the same name as an
345 another target.
346
347 In CMake 3.17 and below, an ALIAS target can overwrite silently an
348 existing target with the same name.
349
350 The OLD behavior for this policy is to allow target overwrite.
351
352 The NEW behavior of this policy is to prevent target overwriting.
353
354 This policy was introduced in CMake version 3.17. Use the cmake_pol‐
355 icy() command to set it to OLD or NEW explicitly. Unlike many poli‐
356 cies, CMake version 3.19.7 does not warn when this policy is not set
357 and simply uses OLD behavior.
358
359 NOTE:
360 The OLD behavior of a policy is deprecated by definition and may be
361 removed in a future version of CMake.
362
363 CMP0106
364 New in version 3.18.
365
366
367 The Documentation module is removed.
368
369 The Documentation was added as a support mechanism for the VTK project
370 and was tuned for that project. Instead of CMake providing this module
371 with (now old) VTK patterns for cache variables and required packages,
372 the module is now deprecated by CMake itself.
373
374 The OLD behavior of this policy is for Documentation to add cache vari‐
375 ables and find VTK documentation dependent packages. The NEW behavior
376 is to act as an empty module.
377
378 This policy was introduced in CMake version 3.18. CMake version 3.19.7
379 warns when the policy is not set and uses OLD behavior. Use the
380 cmake_policy() command to set it to OLD or NEW explicitly.
381
382 NOTE:
383 The OLD behavior of a policy is deprecated by definition and may be
384 removed in a future version of CMake.
385
386 CMP0105
387 New in version 3.18.
388
389
390 LINK_OPTIONS and INTERFACE_LINK_OPTIONS target properties are now used
391 for the device link step.
392
393 In CMake 3.17 and below, link options are not used by the device link
394 step.
395
396 The OLD behavior for this policy is to ignore the link options.
397
398 The NEW behavior of this policy is to use the link options during the
399 device link step.
400
401 This policy was introduced in CMake version 3.17. Use the cmake_pol‐
402 icy() command to set it to OLD or NEW explicitly. Unlike many poli‐
403 cies, CMake version 3.19.7 does not warn when this policy is not set
404 and simply uses OLD behavior.
405
406 NOTE:
407 The OLD behavior of a policy is deprecated by definition and may be
408 removed in a future version of CMake.
409
410 CMP0104
411 New in version 3.18.
412
413
414 Initialize CMAKE_CUDA_ARCHITECTURES when CMAKE_CUDA_COMPILER_ID is
415 NVIDIA. Raise an error if CUDA_ARCHITECTURES is empty.
416
417 CMAKE_CUDA_ARCHITECTURES introduced in CMake 3.18 is used to initialize
418 CUDA_ARCHITECTURES, which passes correct code generation flags to the
419 CUDA compiler.
420
421 Previous to this users had to manually specify the code generation
422 flags. This policy is for backwards compatibility with manually speci‐
423 fying code generation flags.
424
425 The OLD behavior for this policy is to not initialize CMAKE_CUDA_ARCHI‐
426 TECTURES when CMAKE_CUDA_COMPILER_ID is NVIDIA. Empty CUDA_ARCHITEC‐
427 TURES is allowed.
428
429 The NEW behavior of this policy is to initialize CMAKE_CUDA_ARCHITEC‐
430 TURES when CMAKE_CUDA_COMPILER_ID is NVIDIA and raise an error if
431 CUDA_ARCHITECTURES is empty during generation.
432
433 If CUDA_ARCHITECTURES is set to a false value no architectures flags
434 are passed to the compiler. This is intended to support packagers and
435 the rare cases where full control over the passed flags is required.
436
437 This policy was introduced in CMake version 3.18. CMake version 3.19.7
438 warns when the policy is not set and uses OLD behavior. Use the
439 cmake_policy() command to set it to OLD or NEW explicitly.
440
441 NOTE:
442 The OLD behavior of a policy is deprecated by definition and may be
443 removed in a future version of CMake.
444
445 Examples
446 set_property(TARGET tgt PROPERTY CUDA_ARCHITECTURES 35 50 72)
447
448 Generates code for real and virtual architectures 30, 50 and 72.
449
450 set_property(TARGET tgt PROPERTY CUDA_ARCHITECTURES 70-real 72-virtual)
451
452 Generates code for real architecture 70 and virtual architecture 72.
453
454 set_property(TARGET tgt PROPERTY CUDA_ARCHITECTURES OFF)
455
456 CMake will not pass any architecture flags to the compiler.
457
458 CMP0103
459 New in version 3.18.
460
461
462 Multiple calls to export() command with same FILE without APPEND is no
463 longer allowed.
464
465 In CMake 3.17 and below, multiple calls to export() command with the
466 same FILE without APPEND are accepted silently but only the last occur‐
467 rence is taken into account during the generation.
468
469 The OLD behavior for this policy is to ignore the multiple occurrences
470 of
471 export() command except the last one.
472
473 The NEW behavior of this policy is to raise an error on second call to
474 export() command with same FILE without APPEND.
475
476 This policy was introduced in CMake version 3.18. CMake version 3.19.7
477 warns when the policy is not set and uses OLD behavior. Use the
478 cmake_policy() command to set it to OLD or NEW explicitly.
479
480 NOTE:
481 The OLD behavior of a policy is deprecated by definition and may be
482 removed in a future version of CMake.
483
485 CMP0102
486 New in version 3.17.
487
488
489 The mark_as_advanced() command no longer creates a cache entry if one
490 does not already exist.
491
492 In CMake 3.16 and below, if a variable was not defined at all or just
493 defined locally, the mark_as_advanced() command would create a new
494 cache entry with an UNINITIALIZED type and no value. When a find_path()
495 (or other similar find_ command) would next run, it would find this
496 undefined cache entry and set it up with an empty string value. This
497 process would end up deleting the local variable in the process (due to
498 the way the cache works), effectively clearing any stored find_ results
499 that were only available in the local scope.
500
501 The OLD behavior for this policy is to create the empty cache defini‐
502 tion. The NEW behavior of this policy is to ignore variables which do
503 not already exist in the cache.
504
505 This policy was introduced in CMake version 3.17. Use the cmake_pol‐
506 icy() command to set it to OLD or NEW explicitly. Unlike many poli‐
507 cies, CMake version 3.19.7 does not warn when this policy is not set
508 and simply uses OLD behavior.
509
510 NOTE:
511 The OLD behavior of a policy is deprecated by definition and may be
512 removed in a future version of CMake.
513
514 CMP0101
515 New in version 3.17.
516
517
518 target_compile_options() now honors BEFORE keyword in all scopes.
519
520 In CMake 3.16 and below the target_compile_options() ignores the BEFORE
521 keyword in private scope. CMake 3.17 and later honors BEFORE keyword in
522 all scopes. This policy provides compatibility for projects that have
523 not been updated to expect the new behavior.
524
525 The OLD behavior for this policy is to not honor BEFORE keyword in pri‐
526 vate scope. The NEW behavior of this policy is to honor BEFORE keyword
527 in all scopes.
528
529 This policy was introduced in CMake version 3.17. Use the cmake_pol‐
530 icy() command to set it to OLD or NEW explicitly. Unlike many poli‐
531 cies, CMake version 3.19.7 does not warn when this policy is not set
532 and simply uses OLD behavior.
533
534 NOTE:
535 The OLD behavior of a policy is deprecated by definition and may be
536 removed in a future version of CMake.
537
538 CMP0100
539 New in version 3.17.
540
541
542 Let AUTOMOC and AUTOUIC process header files that end with a .hh exten‐
543 sion.
544
545 Since version 3.17, CMake processes header files that end with a .hh
546 extension in AUTOMOC and AUTOUIC. In earlier CMake versions, these
547 header files were ignored by AUTOMOC and AUTOUIC.
548
549 This policy affects how header files that end with a .hh extension get
550 treated in AUTOMOC and AUTOUIC.
551
552 The OLD behavior for this policy is to ignore .hh header files in AUTO‐
553 MOC and AUTOUIC.
554
555 The NEW behavior for this policy is to process .hh header files in
556 AUTOMOC and AUTOUIC just like other header files.
557
558 NOTE:
559 To silence the CMP0100 warning source files can be excluded from
560 AUTOMOC and AUTOUIC processing by setting the source file properties
561 SKIP_AUTOMOC, SKIP_AUTOUIC or SKIP_AUTOGEN.
562
563 # Source skip example:
564 set_property(SOURCE /path/to/file1.hh PROPERTY SKIP_AUTOMOC ON)
565 set_property(SOURCE /path/to/file2.hh PROPERTY SKIP_AUTOUIC ON)
566 set_property(SOURCE /path/to/file3.hh PROPERTY SKIP_AUTOGEN ON)
567
568 This policy was introduced in CMake version 3.17.0. CMake version
569 3.19.7 warns when the policy is not set and uses OLD behavior. Use the
570 cmake_policy() command to set it to OLD or NEW explicitly.
571
572 NOTE:
573 The OLD behavior of a policy is deprecated by definition and may be
574 removed in a future version of CMake.
575
576 CMP0099
577 New in version 3.17.
578
579
580 Target link properties INTERFACE_LINK_OPTIONS, INTERFACE_LINK_DIRECTO‐
581 RIES and INTERFACE_LINK_DEPENDS are now transitive over private depen‐
582 dencies of static libraries.
583
584 In CMake 3.16 and below the interface link properties attached to
585 libraries are not propagated for private dependencies of static
586 libraries. Only the libraries themselves are propagated to link the
587 dependent binary. CMake 3.17 and later prefer to propagate all inter‐
588 face link properties. This policy provides compatibility for projects
589 that have not been updated to expect the new behavior.
590
591 The OLD behavior for this policy is to not propagate interface link
592 properties. The NEW behavior of this policy is to propagate interface
593 link properties.
594
595 This policy was introduced in CMake version 3.17. Use the cmake_pol‐
596 icy() command to set it to OLD or NEW explicitly. Unlike many poli‐
597 cies, CMake version 3.19.7 does not warn when this policy is not set
598 and simply uses OLD behavior.
599
600 NOTE:
601 The OLD behavior of a policy is deprecated by definition and may be
602 removed in a future version of CMake.
603
604 CMP0098
605 New in version 3.17.
606
607
608 FindFLEX runs flex in directory CMAKE_CURRENT_BINARY_DIR when execut‐
609 ing.
610
611 The module provides a FLEX_TARGET macro which generates FLEX output.
612 In CMake 3.16 and below the macro would generate a custom command that
613 runs flex in the current source directory. CMake 3.17 and later prefer
614 to run it in the build directory and use CMAKE_CURRENT_BINARY_DIR as
615 the WORKING_DIRECTORY of its add_custom_command() invocation. This
616 ensures that any implicitly generated file is written relative to the
617 build tree rather than the source tree, unless the generated file is
618 provided as absolute path.
619
620 This policy provides compatibility for projects that have not been
621 updated to expect the new behavior.
622
623 The OLD behavior for this policy is for FLEX_TARGET to use the current
624 source directory for the WORKING_DIRECTORY and where to generate
625 implicit files. The NEW behavior of this policy is to use the current
626 binary directory for the WORKING_DIRECTORY relative to which implicit
627 files are generated unless provided as absolute path.
628
629 This policy was introduced in CMake version 3.17. Use the cmake_pol‐
630 icy() command to set it to OLD or NEW explicitly. Unlike many poli‐
631 cies, CMake version 3.19.7 does not warn when this policy is not set
632 and simply uses OLD behavior.
633
634 NOTE:
635 The OLD behavior of a policy is deprecated by definition and may be
636 removed in a future version of CMake.
637
639 CMP0097
640 New in version 3.16.
641
642
643 ExternalProject_Add() with GIT_SUBMODULES "" initializes no submodules.
644
645 The module provides a GIT_SUBMODULES option which controls what submod‐
646 ules to initialize and update. Starting with CMake 3.16, explicitly
647 setting GIT_SUBMODULES to an empty string means no submodules will be
648 initialized or updated.
649
650 This policy provides compatibility for projects that have not been
651 updated to expect the new behavior.
652
653 The OLD behavior for this policy is for GIT_SUBMODULES when set to an
654 empty string to initialize and update all git submodules. The NEW
655 behavior for this policy is for GIT_SUBMODULES when set to an empty
656 string to initialize and update no git submodules.
657
658 This policy was introduced in CMake version 3.16. Use the cmake_pol‐
659 icy() command to set it to OLD or NEW explicitly. Unlike most poli‐
660 cies, CMake version 3.19.7 does not warn when this policy is not set
661 and simply uses OLD behavior.
662
663 CMP0096
664 New in version 3.16.
665
666
667 The project() command preserves leading zeros in version components.
668
669 When a VERSION <major>[.<minor>[.<patch>[.<tweak>]]]] argument is given
670 to the project() command, it stores the version string in the
671 PROJECT_VERSION variable and stores individual integer version compo‐
672 nents in PROJECT_VERSION_{MAJOR,MINOR,PATCH,TWEAK} variables (see pol‐
673 icy CMP0048). CMake 3.15 and below dropped leading zeros from each
674 component. CMake 3.16 and higher prefer to preserve leading zeros.
675 This policy provides compatibility for projects that have not been
676 updated to expect the new behavior.
677
678 The OLD behavior of this policy drops leading zeros in all components,
679 e.g. such that version 1.07.06 becomes 1.7.6. The NEW behavior of
680 this policy preserves the leading zeros in all components, such that
681 version 1.07.06 remains unchanged.
682
683 This policy was introduced in CMake version 3.16. Unlike many poli‐
684 cies, CMake version 3.19.7 does not warn when this policy is not set
685 and simply uses the OLD behavior. Use the cmake_policy() command to
686 set it to OLD or NEW explicitly.
687
688 NOTE:
689 The OLD behavior of a policy is deprecated by definition and may be
690 removed in a future version of CMake.
691
692 CMP0095
693 New in version 3.16.
694
695
696 RPATH entries are properly escaped in the intermediary CMake install
697 script.
698
699 In CMake 3.15 and earlier, RPATH entries set via CMAKE_INSTALL_RPATH or
700 via INSTALL_RPATH have not been escaped before being inserted into the
701 cmake_install.cmake script. Dynamic linkers on ELF-based systems (e.g.
702 Linux and FreeBSD) allow certain keywords in RPATH entries, such as
703 ${ORIGIN} (More details are available in the ld.so man pages on those
704 systems). The syntax of these keywords can match CMake’s variable syn‐
705 tax. In order to not be substituted (usually to an empty string)
706 already by the intermediary cmake_install.cmake script, the user had to
707 double-escape such RPATH keywords, e.g. set(CMAKE_INSTALL_RPATH
708 "\\\${ORIGIN}/../lib"). Since the intermediary cmake_install.cmake
709 script is an implementation detail of CMake, CMake 3.16 and later will
710 make sure RPATH entries are inserted literally by escaping any coinci‐
711 dental CMake syntax.
712
713 The OLD behavior of this policy is to not escape RPATH entries in the
714 intermediary cmake_install.cmake script. The NEW behavior is to prop‐
715 erly escape coincidental CMake syntax in RPATH entries when generating
716 the intermediary cmake_install.cmake script.
717
718 This policy was introduced in CMake version 3.16. CMake version 3.19.7
719 warns when the policy is not set and detected usage of CMake-like syn‐
720 tax and uses OLD behavior. Use the cmake_policy() command to set it to
721 OLD or NEW explicitly.
722
723 NOTE:
724 The OLD behavior of a policy is deprecated by definition and may be
725 removed in a future version of CMake.
726
728 CMP0094
729 New in version 3.15.
730
731
732 Modules FindPython3, FindPython2 and FindPython use LOCATION for lookup
733 strategy.
734
735 Starting with CMake 3.15, Modules FindPython3, FindPython2 and Find‐
736 Python set value LOCATION for, respectively, variables
737 Python3_FIND_STRATEGY, Python2_FIND_STRATEGY and Python_FIND_STRATEGY.
738 This policy provides compatibility with projects that expect the legacy
739 behavior.
740
741 The OLD behavior for this policy set value VERSION for variables
742 Python3_FIND_STRATEGY, Python2_FIND_STRATEGY and Python_FIND_STRATEGY.
743
744 This policy was introduced in CMake version 3.15. Use the cmake_pol‐
745 icy() command to set it to OLD or NEW explicitly. Unlike many poli‐
746 cies, CMake version 3.19.7 does not warn when this policy is not set
747 and simply uses the OLD behavior.
748
749 NOTE:
750 The OLD behavior of a policy is deprecated by definition and may be
751 removed in a future version of CMake.
752
753 CMP0093
754 New in version 3.15.
755
756
757 FindBoost reports Boost_VERSION in x.y.z format.
758
759 In CMake 3.14 and below the module would report the Boost version num‐
760 ber as specified in the preprocessor definition BOOST_VERSION in the
761 boost/version.hpp file. In CMake 3.15 and later it is preferred that
762 the reported version number matches the x.y.z format reported by the
763 CMake package shipped with Boost 1.70.0 and later. The macro value is
764 still reported in the Boost_VERSION_MACRO variable.
765
766 The OLD behavior for this policy is for FindBoost to report Boost_VER‐
767 SION as specified in the preprocessor definition BOOST_VERSION in
768 boost/version.hpp. The NEW behavior for this policy is for FindBoost to
769 report Boost_VERSION in x.y.z format.
770
771 This policy was introduced in CMake version 3.15. Use the cmake_pol‐
772 icy() command to set it to OLD or NEW explicitly. Unlike many poli‐
773 cies, CMake version 3.19.7 does not warn when this policy is not set
774 and simply uses the OLD behavior.
775
776 NOTE:
777 The OLD behavior of a policy is deprecated by definition and may be
778 removed in a future version of CMake.
779
780 CMP0092
781 New in version 3.15.
782
783
784 MSVC warning flags are not in CMAKE_<LANG>_FLAGS by default.
785
786 When using MSVC-like compilers in CMake 3.14 and below, warning flags
787 like /W3 are added to CMAKE_<LANG>_FLAGS by default. This is problem‐
788 atic for projects that want to choose a different warning level pro‐
789 grammatically. In particular, it requires string editing of the
790 CMAKE_<LANG>_FLAGS variables with knowledge of the CMake builtin
791 defaults so they can be replaced.
792
793 CMake 3.15 and above prefer to leave out warning flags from the value
794 of CMAKE_<LANG>_FLAGS by default.
795
796 This policy provides compatibility with projects that have not been
797 updated to expect the lack of warning flags. The policy setting takes
798 effect as of the first project() or enable_language() command that ini‐
799 tializes CMAKE_<LANG>_FLAGS for a given language <LANG>.
800
801 NOTE:
802 Once the policy has taken effect at the top of a project for a given
803 language, that choice must be used throughout the tree for that lan‐
804 guage. In projects that have nested projects in subdirectories, be
805 sure to convert everything together.
806
807 The OLD behavior for this policy is to place MSVC warning flags in the
808 default CMAKE_<LANG>_FLAGS cache entries. The NEW behavior for this
809 policy is to not place MSVC warning flags in the default cache entries.
810
811 This policy was introduced in CMake version 3.15. Use the cmake_pol‐
812 icy() command to set it to OLD or NEW explicitly. Unlike many poli‐
813 cies, CMake version 3.19.7 does not warn when this policy is not set
814 and simply uses OLD behavior.
815
816 NOTE:
817 The OLD behavior of a policy is deprecated by definition and may be
818 removed in a future version of CMake.
819
820 CMP0091
821 New in version 3.15.
822
823
824 MSVC runtime library flags are selected by an abstraction.
825
826 Compilers targeting the MSVC ABI have flags to select the MSVC runtime
827 library. Runtime library selection typically varies with build config‐
828 uration because there is a separate runtime library for Debug builds.
829
830 In CMake 3.14 and below, MSVC runtime library selection flags are added
831 to the default CMAKE_<LANG>_FLAGS_<CONFIG> cache entries by CMake auto‐
832 matically. This allows users to edit their cache entries to adjust the
833 flags. However, the presence of such default flags is problematic for
834 projects that want to choose a different runtime library programmati‐
835 cally. In particular, it requires string editing of the
836 CMAKE_<LANG>_FLAGS_<CONFIG> variables with knowledge of the CMake
837 builtin defaults so they can be replaced.
838
839 CMake 3.15 and above prefer to leave the MSVC runtime library selection
840 flags out of the default CMAKE_<LANG>_FLAGS_<CONFIG> values and instead
841 offer a first-class abstraction. The CMAKE_MSVC_RUNTIME_LIBRARY vari‐
842 able and MSVC_RUNTIME_LIBRARY target property may be set to select the
843 MSVC runtime library. If they are not set then CMake uses the default
844 value MultiThreaded$<$<CONFIG:Debug>:Debug>DLL which is equivalent to
845 the original flags.
846
847 This policy provides compatibility with projects that have not been
848 updated to be aware of the abstraction. The policy setting takes
849 effect as of the first project() or enable_language() command that
850 enables a language whose compiler targets the MSVC ABI.
851
852 NOTE:
853 Once the policy has taken effect at the top of a project, that
854 choice must be used throughout the tree. In projects that have
855 nested projects in subdirectories, be sure to convert everything
856 together.
857
858 The OLD behavior for this policy is to place MSVC runtime library flags
859 in the default CMAKE_<LANG>_FLAGS_<CONFIG> cache entries and ignore the
860 CMAKE_MSVC_RUNTIME_LIBRARY abstraction. The NEW behavior for this pol‐
861 icy is to not place MSVC runtime library flags in the default cache
862 entries and use the abstraction instead.
863
864 This policy was introduced in CMake version 3.15. Use the cmake_pol‐
865 icy() command to set it to OLD or NEW explicitly. Unlike many poli‐
866 cies, CMake version 3.19.7 does not warn when this policy is not set
867 and simply uses OLD behavior.
868
869 NOTE:
870 The OLD behavior of a policy is deprecated by definition and may be
871 removed in a future version of CMake.
872
873 CMP0090
874 New in version 3.15.
875
876
877 export(PACKAGE) does not populate package registry by default.
878
879 In CMake 3.14 and below the export(PACKAGE) command populated the user
880 package registry by default and users needed to set the
881 CMAKE_EXPORT_NO_PACKAGE_REGISTRY to disable it, e.g. in automated build
882 and packaging environments. Since the user package registry is stored
883 outside the build tree, this side effect should not be enabled by
884 default. Therefore CMake 3.15 and above prefer that export(PACKAGE)
885 does nothing unless an explicit CMAKE_EXPORT_PACKAGE_REGISTRY variable
886 is set to enable it. This policy provides compatibility with projects
887 that have not been updated.
888
889 The OLD behavior for this policy is for export(PACKAGE) command to pop‐
890 ulate the user package registry unless CMAKE_EXPORT_NO_PACKAGE_REGISTRY
891 is enabled. The NEW behavior is for export(PACKAGE) command to do
892 nothing unless the CMAKE_EXPORT_PACKAGE_REGISTRY is enabled.
893
894 This policy was introduced in CMake version 3.15. Use the cmake_pol‐
895 icy() command to set it to OLD or NEW explicitly. Unlike most poli‐
896 cies, CMake version 3.19.7 does not warn when this policy is not set
897 and simply uses OLD behavior.
898
899 NOTE:
900 The OLD behavior of a policy is deprecated by definition and may be
901 removed in a future version of CMake.
902
903 CMP0089
904 New in version 3.15.
905
906
907 Compiler id for IBM Clang-based XL compilers is now XLClang.
908
909 CMake 3.15 and above recognize that IBM’s Clang-based XL compilers that
910 define __ibmxl__ are a new front-end distinct from xlc with a different
911 command line and set of capabilities. CMake now prefers to present
912 this to projects by setting the CMAKE_<LANG>_COMPILER_ID variable to
913 XLClang instead of XL. However, existing projects may assume the com‐
914 piler id for Clang-based XL is just XL as it was in CMake versions
915 prior to 3.15. Therefore this policy determines for Clang-based XL
916 compilers which compiler id to report in the CMAKE_<LANG>_COMPILER_ID
917 variable after language <LANG> is enabled by the project() or
918 enable_language() command. The policy must be set prior to the invoca‐
919 tion of either command.
920
921 The OLD behavior for this policy is to use compiler id XL. The NEW
922 behavior for this policy is to use compiler id XLClang.
923
924 This policy was introduced in CMake version 3.15. Use the cmake_pol‐
925 icy() command to set this policy to OLD or NEW explicitly. Unlike most
926 policies, CMake version 3.19.7 does not warn by default when this pol‐
927 icy is not set and simply uses OLD behavior. See documentation of the
928 CMAKE_POLICY_WARNING_CMP0089 variable to control the warning.
929
930 NOTE:
931 The OLD behavior of a policy is deprecated by definition and may be
932 removed in a future version of CMake.
933
935 CMP0088
936 New in version 3.14.
937
938
939 FindBISON runs bison in CMAKE_CURRENT_BINARY_DIR when executing.
940
941 The module provides a BISON_TARGET macro which generates BISON output.
942 In CMake 3.13 and below the macro would generate a custom command that
943 runs bison in the source directory. CMake 3.14 and later prefer to run
944 it in the build directory and use CMAKE_CURRENT_BINARY_DIR as the WORK‐
945 ING_DIRECTORY of its add_custom_command() invocation. This ensures
946 that any implicitly generated file is written to the build tree rather
947 than the source.
948
949 This policy provides compatibility for projects that have not been
950 updated to expect the new behavior.
951
952 The OLD behavior for this policy is for BISON_TARGET to use the current
953 source directory for the WORKING_DIRECTORY and where to generate
954 implicit files. The NEW behavior of this policy is to use the current
955 binary directory for the WORKING_DIRECTORY and where to generate
956 implicit files.
957
958 This policy was introduced in CMake version 3.14. Use the cmake_pol‐
959 icy() command to set it to OLD or NEW explicitly. Unlike most poli‐
960 cies, CMake version 3.19.7 does not warn when this policy is not set
961 and simply uses OLD behavior.
962
963 NOTE:
964 The OLD behavior of a policy is deprecated by definition and may be
965 removed in a future version of CMake.
966
967 CMP0087
968 New in version 3.14.
969
970
971 install(CODE) and install(SCRIPT) support generator expressions.
972
973 In CMake 3.13 and earlier, install(CODE) and install(SCRIPT) did not
974 evaluate generator expressions. CMake 3.14 and later will evaluate
975 generator expressions for install(CODE) and install(SCRIPT).
976
977 The OLD behavior of this policy is for install(CODE) and
978 install(SCRIPT) to not evaluate generator expressions. The NEW behav‐
979 ior is to evaluate generator expressions for install(CODE) and
980 install(SCRIPT).
981
982 Note that it is the value of this policy setting at the end of the
983 directory scope that is important, not its setting at the time of the
984 call to install(CODE) or install(SCRIPT). This has implications for
985 calling these commands from places that have their own policy scope but
986 not their own directory scope (e.g. from files brought in via include()
987 rather than add_subdirectory()).
988
989 This policy was introduced in CMake version 3.14. CMake version 3.19.7
990 warns when the policy is not set and uses OLD behavior. Use the
991 cmake_policy() command to set it to OLD or NEW explicitly.
992
993 NOTE:
994 The OLD behavior of a policy is deprecated by definition and may be
995 removed in a future version of CMake.
996
997 CMP0086
998 New in version 3.14.
999
1000
1001 UseSWIG honors SWIG_MODULE_NAME via -module flag.
1002
1003 Starting with CMake 3.14, UseSWIG passes option -module <module_name>
1004 to SWIG compiler if the file property SWIG_MODULE_NAME is specified.
1005 This policy provides compatibility with projects that expect the legacy
1006 behavior.
1007
1008 The OLD behavior for this policy is to never pass -module option. The
1009 NEW behavior is to pass -module option to SWIG compiler if SWIG_MOD‐
1010 ULE_NAME is specified.
1011
1012 This policy was introduced in CMake version 3.14. CMake version 3.19.7
1013 warns when the policy is not set and uses OLD behavior. Use the
1014 cmake_policy() command to set it to OLD or NEW explicitly.
1015
1016 NOTE:
1017 The OLD behavior of a policy is deprecated by definition and may be
1018 removed in a future version of CMake.
1019
1020 CMP0085
1021 New in version 3.14.
1022
1023
1024 $<IN_LIST:...> handles empty list items.
1025
1026 In CMake 3.13 and lower, the $<IN_LIST:...> generator expression always
1027 returned 0 if the first argument was empty, even if the list contained
1028 an empty item. This behavior is inconsistent with the IN_LIST behavior
1029 of if(), which this generator expression is meant to emulate. CMake
1030 3.14 and later handles this case correctly.
1031
1032 The OLD behavior of this policy is for $<IN_LIST:...> to always return
1033 0 if the first argument is empty. The NEW behavior is to return 1 if
1034 the first argument is empty and the list contains an empty item.
1035
1036 This policy was introduced in CMake version 3.14. CMake version 3.19.7
1037 warns when the policy is not set and uses OLD behavior. Use the
1038 cmake_policy() command to set it to OLD or NEW explicitly.
1039
1040 NOTE:
1041 The OLD behavior of a policy is deprecated by definition and may be
1042 removed in a future version of CMake.
1043
1044 CMP0084
1045 New in version 3.14.
1046
1047
1048 The FindQt module does not exist for find_package().
1049
1050 The existence of FindQt means that for Qt upstream to provide package
1051 config files that can be found by find_package(Qt), the consuming
1052 project has to explicitly specify find_package(Qt CONFIG). Removing
1053 this module gives Qt a path forward for exporting its own config files
1054 which can easily be found by consuming projects.
1055
1056 This policy pretends that CMake’s internal FindQt module does not exist
1057 for find_package(). If a project really wants to use Qt 3 or 4, it can
1058 call find_package(Qt[34]), include(FindQt), or add FindQt to their
1059 CMAKE_MODULE_PATH.
1060
1061 The OLD behavior of this policy is for FindQt to exist for find_pack‐
1062 age(). The NEW behavior is to pretend that it doesn’t exist for
1063 find_package().
1064
1065 This policy was introduced in CMake version 3.14. CMake version 3.19.7
1066 warns when the policy is not set and uses OLD behavior. Use the
1067 cmake_policy() command to set it to OLD or NEW explicitly.
1068
1069 NOTE:
1070 The OLD behavior of a policy is deprecated by definition and may be
1071 removed in a future version of CMake.
1072
1073 CMP0083
1074 New in version 3.14.
1075
1076
1077 To control generation of Position Independent Executable (PIE) or not,
1078 some flags are required at link time.
1079
1080 CMake 3.13 and lower did not add these link flags when POSITION_INDE‐
1081 PENDENT_CODE is set.
1082
1083 The OLD behavior for this policy is to not manage PIE link flags. The
1084 NEW behavior is to add link flags if POSITION_INDEPENDENT_CODE is set:
1085
1086 · Set to TRUE: flags to produce a position independent executable are
1087 passed to the linker step. For example -pie for GCC.
1088
1089 · Set to FALSE: flags not to produce a position independent executable
1090 are passed to the linker step. For example -no-pie for GCC.
1091
1092 · Not set: no flags are passed to the linker step.
1093
1094 Since a given linker may not support PIE flags in all environments in
1095 which it is used, it is the project’s responsibility to use the Check‐
1096 PIESupported module to check for support to ensure that the POSI‐
1097 TION_INDEPENDENT_CODE target property for executables will be honored
1098 at link time.
1099
1100 This policy was introduced in CMake version 3.14. Use the cmake_pol‐
1101 icy() command to set it to OLD or NEW explicitly. Unlike most poli‐
1102 cies, CMake version 3.19.7 does not warn when this policy is not set
1103 and simply uses OLD behavior.
1104
1105 NOTE:
1106 Android platform has a special handling of PIE so it is not required
1107 to use the CheckPIESupported module to ensure flags are passed to
1108 the linker.
1109
1110 NOTE:
1111 The OLD behavior of a policy is deprecated by definition and may be
1112 removed in a future version of CMake.
1113
1114 Examples
1115 Behave like CMake 3.13 and do not apply any PIE flags at link stage.
1116
1117 cmake_minimum_required(VERSION 3.13)
1118 project(foo)
1119
1120 # ...
1121
1122 add_executable(foo ...)
1123 set_property(TARGET foo PROPERTY POSITION_INDEPENDENT_CODE TRUE)
1124
1125 Use the CheckPIESupported module to detect whether PIE is supported by
1126 the current linker and environment. Apply PIE flags only if the linker
1127 supports them.
1128
1129 cmake_minimum_required(VERSION 3.14) # CMP0083 NEW
1130 project(foo)
1131
1132 include(CheckPIESupported)
1133 check_pie_supported()
1134
1135 # ...
1136
1137 add_executable(foo ...)
1138 set_property(TARGET foo PROPERTY POSITION_INDEPENDENT_CODE TRUE)
1139
1140 CMP0082
1141 New in version 3.14.
1142
1143
1144 Install rules from add_subdirectory() calls are interleaved with those
1145 in caller.
1146
1147 CMake 3.13 and lower ran the install rules from add_subdirectory()
1148 after all other install rules, even if add_subdirectory() was called
1149 before the other install rules. CMake 3.14 and above prefer to inter‐
1150 leave these add_subdirectory() install rules with the others so that
1151 they are run in the order they are declared. This policy provides com‐
1152 patibility for projects that have not been updated to expect the new
1153 behavior.
1154
1155 The OLD behavior for this policy is to run the install rules from
1156 add_subdirectory() after the other install rules. The NEW behavior for
1157 this policy is to run all install rules in the order they are declared.
1158
1159 This policy was introduced in CMake version 3.14. Unlike most poli‐
1160 cies, CMake version 3.19.7 does not warn by default when this policy is
1161 not set and simply uses OLD behavior. See documentation of the
1162 CMAKE_POLICY_WARNING_CMP0082 variable to control the warning.
1163
1164 NOTE:
1165 The OLD behavior of a policy is deprecated by definition and may be
1166 removed in a future version of CMake.
1167
1169 CMP0081
1170 New in version 3.13.
1171
1172
1173 Relative paths not allowed in LINK_DIRECTORIES target property.
1174
1175 CMake 3.12 and lower allowed the LINK_DIRECTORIES directory property to
1176 contain relative paths. The base path for such relative entries is not
1177 well defined. CMake 3.13 and later will issue a FATAL_ERROR if the
1178 LINK_DIRECTORIES target property (which is initialized by the
1179 LINK_DIRECTORIES directory property) contains a relative path.
1180
1181 The OLD behavior for this policy is not to warn about relative paths in
1182 the LINK_DIRECTORIES target property. The NEW behavior for this policy
1183 is to issue a FATAL_ERROR if LINK_DIRECTORIES contains a relative path.
1184
1185 This policy was introduced in CMake version 3.13. CMake version 3.19.7
1186 warns when the policy is not set and uses OLD behavior. Use the
1187 cmake_policy() command to set it to OLD or NEW explicitly.
1188
1189 NOTE:
1190 The OLD behavior of a policy is deprecated by definition and may be
1191 removed in a future version of CMake.
1192
1193 CMP0080
1194 New in version 3.13.
1195
1196
1197 BundleUtilities cannot be included at configure time.
1198
1199 The macros provided by BundleUtilities are intended to be invoked at
1200 install time rather than at configure time, because they depend on the
1201 listed targets already existing at the time they are invoked. If they
1202 are invoked at configure time, the targets haven’t been built yet, and
1203 the commands will fail.
1204
1205 This policy restricts the inclusion of BundleUtilities to cmake -P
1206 style scripts and install rules. Specifically, it looks for the pres‐
1207 ence of CMAKE_GENERATOR and throws a fatal error if it exists.
1208
1209 The OLD behavior of this policy is to allow BundleUtilities to be
1210 included at configure time. The NEW behavior of this policy is to dis‐
1211 allow such inclusion.
1212
1213 This policy was introduced in CMake version 3.13. CMake version 3.19.7
1214 warns when the policy is not set and uses OLD behavior. Use the
1215 cmake_policy() command to set it to OLD or NEW explicitly.
1216
1217 NOTE:
1218 The OLD behavior of a policy is deprecated by definition and may be
1219 removed in a future version of CMake.
1220
1221 CMP0079
1222 New in version 3.13.
1223
1224
1225 target_link_libraries() allows use with targets in other directories.
1226
1227 Prior to CMake 3.13 the target_link_libraries() command did not accept
1228 targets not created in the calling directory as its first argument for
1229 calls that update the LINK_LIBRARIES of the target itself. It did
1230 accidentally accept targets from other directories on calls that only
1231 update the INTERFACE_LINK_LIBRARIES, but would simply add entries to
1232 the property as if the call were made in the original directory. Thus
1233 link interface libraries specified this way were always looked up by
1234 generators in the scope of the original target rather than in the scope
1235 that called target_link_libraries().
1236
1237 CMake 3.13 now allows the target_link_libraries() command to be called
1238 from any directory to add link dependencies and link interface
1239 libraries to targets created in other directories. The entries are
1240 added to LINK_LIBRARIES and INTERFACE_LINK_LIBRARIES using a special
1241 (internal) suffix to tell the generators to look up the names in the
1242 calling scope rather than the scope that created the target.
1243
1244 This policy provides compatibility with projects that already use tar‐
1245 get_link_libraries() with the INTERFACE keyword on a target in another
1246 directory to add INTERFACE_LINK_LIBRARIES entries to be looked up in
1247 the target’s directory. Such projects should be updated to be aware of
1248 the new scoping rules in that case.
1249
1250 The OLD behavior of this policy is to disallow target_link_libraries()
1251 calls naming targets from another directory except in the previously
1252 accidentally allowed case of using the INTERFACE keyword only. The NEW
1253 behavior of this policy is to allow all such calls but use the new
1254 scoping rules.
1255
1256 This policy was introduced in CMake version 3.13. CMake version 3.19.7
1257 warns when the policy is not set and uses OLD behavior. Use the
1258 cmake_policy() command to set it to OLD or NEW explicitly.
1259
1260 NOTE:
1261 The OLD behavior of a policy is deprecated by definition and may be
1262 removed in a future version of CMake.
1263
1264 CMP0078
1265 New in version 3.13.
1266
1267
1268 UseSWIG generates standard target names.
1269
1270 Starting with CMake 3.13, UseSWIG generates now standard target names.
1271 This policy provides compatibility with projects that expect the legacy
1272 behavior.
1273
1274 The OLD behavior for this policy relies on UseSWIG_TARGET_NAME_PREFER‐
1275 ENCE variable that can be used to specify an explicit preference. The
1276 value may be one of:
1277
1278 · LEGACY: legacy strategy is applied. Variable SWIG_MOD‐
1279 ULE_<name>_REAL_NAME must be used to get real target name. This is
1280 the default if not specified.
1281
1282 · STANDARD: target name matches specified name.
1283
1284 This policy was introduced in CMake version 3.13. CMake version 3.19.7
1285 warns when the policy is not set and uses OLD behavior. Use the
1286 cmake_policy() command to set it to OLD or NEW explicitly.
1287
1288 NOTE:
1289 The OLD behavior of a policy is deprecated by definition and may be
1290 removed in a future version of CMake.
1291
1292 CMP0077
1293 New in version 3.13.
1294
1295
1296 option() honors normal variables.
1297
1298 The option() command is typically used to create a cache entry to allow
1299 users to set the option. However, there are cases in which a normal
1300 (non-cached) variable of the same name as the option may be defined by
1301 the project prior to calling the option() command. For example, a
1302 project that embeds another project as a subdirectory may want to
1303 hard-code options of the subproject to build the way it needs.
1304
1305 For historical reasons in CMake 3.12 and below the option() command
1306 removes a normal (non-cached) variable of the same name when:
1307
1308 · a cache entry of the specified name does not exist at all, or
1309
1310 · a cache entry of the specified name exists but has not been given a
1311 type (e.g. via -D<name>=ON on the command line).
1312
1313 In both of these cases (typically on the first run in a new build
1314 tree), the option() command gives the cache entry type BOOL and removes
1315 any normal (non-cached) variable of the same name. In the remaining
1316 case that the cache entry of the specified name already exists and has
1317 a type (typically on later runs in a build tree), the option() command
1318 changes nothing and any normal variable of the same name remains set.
1319
1320 In CMake 3.13 and above the option() command prefers to do nothing when
1321 a normal variable of the given name already exists. It does not create
1322 or update a cache entry or remove the normal variable. The new behav‐
1323 ior is consistent between the first and later runs in a build tree.
1324 This policy provides compatibility with projects that have not been
1325 updated to expect the new behavior.
1326
1327 When the option() command sees a normal variable of the given name:
1328
1329 · The OLD behavior for this policy is to proceed even when a normal
1330 variable of the same name exists. If the cache entry does not
1331 already exist and have a type then it is created and/or given a type
1332 and the normal variable is removed.
1333
1334 · The NEW behavior for this policy is to do nothing when a normal vari‐
1335 able of the same name exists. The normal variable is not removed.
1336 The cache entry is not created or updated and is ignored if it
1337 exists.
1338
1339 This policy was introduced in CMake version 3.13. CMake version 3.19.7
1340 warns when the policy is not set and uses OLD behavior. Use the
1341 cmake_policy() command to set it to OLD or NEW explicitly.
1342
1343 NOTE:
1344 The OLD behavior of a policy is deprecated by definition and may be
1345 removed in a future version of CMake.
1346
1347 CMP0076
1348 New in version 3.13.
1349
1350
1351 The target_sources() command converts relative paths to absolute.
1352
1353 In CMake 3.13 and above, the target_sources() command now converts rel‐
1354 ative source file paths to absolute paths in the following cases:
1355
1356 · Source files are added to the target’s INTERFACE_SOURCES property.
1357
1358 · The target’s SOURCE_DIR property differs from CMAKE_CUR‐
1359 RENT_SOURCE_DIR.
1360
1361 A path that begins with a generator expression is always left unmodi‐
1362 fied.
1363
1364 This policy provides compatibility with projects that have not been
1365 updated to expect this behavior. The OLD behavior for this policy is
1366 to leave all relative source file paths unmodified. The NEW behavior
1367 of this policy is to convert relative paths to absolute according to
1368 above rules.
1369
1370 This policy was introduced in CMake version 3.13. CMake version 3.19.7
1371 warns when the policy is not set and uses OLD behavior. Use the
1372 cmake_policy() command to set it to OLD or NEW explicitly.
1373
1374 NOTE:
1375 The OLD behavior of a policy is deprecated by definition and may be
1376 removed in a future version of CMake.
1377
1379 CMP0075
1380 New in version 3.12.
1381
1382
1383 Include file check macros honor CMAKE_REQUIRED_LIBRARIES.
1384
1385 In CMake 3.12 and above, the
1386
1387 · check_include_file macro in the CheckIncludeFile module, the
1388
1389 · check_include_file_cxx macro in the CheckIncludeFileCXX module, and
1390 the
1391
1392 · check_include_files macro in the CheckIncludeFiles module
1393
1394 now prefer to link the check executable to the libraries listed in the
1395 CMAKE_REQUIRED_LIBRARIES variable. This policy provides compatibility
1396 with projects that have not been updated to expect this behavior.
1397
1398 The OLD behavior for this policy is to ignore CMAKE_REQUIRED_LIBRARIES
1399 in the include file check macros. The NEW behavior of this policy is
1400 to honor CMAKE_REQUIRED_LIBRARIES in the include file check macros.
1401
1402 This policy was introduced in CMake version 3.12. CMake version 3.19.7
1403 warns when the policy is not set and uses OLD behavior. Use the
1404 cmake_policy() command to set it to OLD or NEW explicitly.
1405
1406 NOTE:
1407 The OLD behavior of a policy is deprecated by definition and may be
1408 removed in a future version of CMake.
1409
1410 CMP0074
1411 New in version 3.12.
1412
1413
1414 find_package() uses <PackageName>_ROOT variables.
1415
1416 In CMake 3.12 and above the find_package(<PackageName>) command now
1417 searches prefixes specified by the <PackageName>_ROOT CMake variable
1418 and the <PackageName>_ROOT environment variable. Package roots are
1419 maintained as a stack so nested calls to all find_* commands inside
1420 find modules and config packages also search the roots as prefixes.
1421 This policy provides compatibility with projects that have not been
1422 updated to avoid using <PackageName>_ROOT variables for other purposes.
1423
1424 The OLD behavior for this policy is to ignore <PackageName>_ROOT vari‐
1425 ables. The NEW behavior for this policy is to use <PackageName>_ROOT
1426 variables.
1427
1428 This policy was introduced in CMake version 3.12. CMake version 3.19.7
1429 warns when the policy is not set and uses OLD behavior. Use the
1430 cmake_policy() command to set it to OLD or NEW explicitly.
1431
1432 NOTE:
1433 The OLD behavior of a policy is deprecated by definition and may be
1434 removed in a future version of CMake.
1435
1436 CMP0073
1437 New in version 3.12.
1438
1439
1440 Do not produce legacy _LIB_DEPENDS cache entries.
1441
1442 Ancient CMake versions once used <tgt>_LIB_DEPENDS cache entries to
1443 propagate library link dependencies. This has long been done by other
1444 means, leaving the export_library_dependencies() command as the only
1445 user of these values. That command has long been disallowed by policy
1446 CMP0033, but the <tgt>_LIB_DEPENDS cache entries were left for compati‐
1447 bility with possible non-standard uses by projects.
1448
1449 CMake 3.12 and above now prefer to not produce these cache entries at
1450 all. This policy provides compatibility with projects that have not
1451 been updated to avoid using them.
1452
1453 The OLD behavior for this policy is to set <tgt>_LIB_DEPENDS cache
1454 entries. The NEW behavior for this policy is to not set them.
1455
1456 This policy was introduced in CMake version 3.12. Use the cmake_pol‐
1457 icy() command to set it to OLD or NEW explicitly. Unlike most poli‐
1458 cies, CMake version 3.19.7 does not warn when this policy is not set
1459 and simply uses OLD behavior.
1460
1461 NOTE:
1462 The OLD behavior of a policy is deprecated by definition and may be
1463 removed in a future version of CMake.
1464
1466 CMP0072
1467 New in version 3.11.
1468
1469
1470 FindOpenGL prefers GLVND by default when available.
1471
1472 The FindOpenGL module provides an OpenGL::GL target and an
1473 OPENGL_LIBRARIES variable for projects to use for legacy GL interfaces.
1474 When both a legacy GL library (e.g. libGL.so) and GLVND libraries for
1475 OpenGL and GLX (e.g. libOpenGL.so and libGLX.so) are available, the
1476 module must choose between them. It documents an OpenGL_GL_PREFERENCE
1477 variable that can be used to specify an explicit preference. When no
1478 such preference is set, the module must choose a default preference.
1479
1480 CMake 3.11 and above prefer to choose GLVND libraries. This policy
1481 provides compatibility with projects that expect the legacy GL library
1482 to be used.
1483
1484 The OLD behavior for this policy is to set OpenGL_GL_PREFERENCE to
1485 LEGACY. The NEW behavior for this policy is to set OpenGL_GL_PREFER‐
1486 ENCE to GLVND.
1487
1488 This policy was introduced in CMake version 3.11. CMake version 3.19.7
1489 warns when the policy is not set and uses OLD behavior. Use the
1490 cmake_policy() command to set it to OLD or NEW explicitly.
1491
1492 NOTE:
1493 The OLD behavior of a policy is deprecated by definition and may be
1494 removed in a future version of CMake.
1495
1497 CMP0071
1498 New in version 3.10.
1499
1500
1501 Let AUTOMOC and AUTOUIC process GENERATED files.
1502
1503 Since version 3.10, CMake processes regular and GENERATED source files
1504 in AUTOMOC and AUTOUIC. In earlier CMake versions, only regular source
1505 files were processed. GENERATED source files were ignored silently.
1506
1507 This policy affects how source files that are GENERATED get treated in
1508 AUTOMOC and AUTOUIC.
1509
1510 The OLD behavior for this policy is to ignore GENERATED source files in
1511 AUTOMOC and AUTOUIC.
1512
1513 The NEW behavior for this policy is to process GENERATED source files
1514 in AUTOMOC and AUTOUIC just like regular source files.
1515
1516 NOTE:
1517 To silence the CMP0071 warning source files can be excluded from
1518 AUTOMOC and AUTOUIC processing by setting the source file properties
1519 SKIP_AUTOMOC, SKIP_AUTOUIC or SKIP_AUTOGEN.
1520
1521 Source skip example:
1522
1523 # ...
1524 set_property(SOURCE /path/to/file1.h PROPERTY SKIP_AUTOMOC ON)
1525 set_property(SOURCE /path/to/file2.h PROPERTY SKIP_AUTOUIC ON)
1526 set_property(SOURCE /path/to/file3.h PROPERTY SKIP_AUTOGEN ON)
1527 # ...
1528
1529 This policy was introduced in CMake version 3.10. CMake version 3.19.7
1530 warns when the policy is not set and uses OLD behavior. Use the
1531 cmake_policy() command to set it to OLD or NEW explicitly.
1532
1533 NOTE:
1534 The OLD behavior of a policy is deprecated by definition and may be
1535 removed in a future version of CMake.
1536
1537 CMP0070
1538 New in version 3.10.
1539
1540
1541 Define file(GENERATE) behavior for relative paths.
1542
1543 CMake 3.10 and newer define that relative paths given to INPUT and OUT‐
1544 PUT arguments of file(GENERATE) are interpreted relative to the current
1545 source and binary directories, respectively. CMake 3.9 and lower did
1546 not define any behavior for relative paths but did not diagnose them
1547 either and accidentally treated them relative to the process working
1548 directory. Policy CMP0070 provides compatibility with projects that
1549 used the old undefined behavior.
1550
1551 This policy affects behavior of relative paths given to file(GENERATE).
1552 The OLD behavior for this policy is to treat the paths relative to the
1553 working directory of CMake. The NEW behavior for this policy is to
1554 interpret relative paths with respect to the current source or binary
1555 directory of the caller.
1556
1557 This policy was introduced in CMake version 3.10. CMake version 3.19.7
1558 warns when the policy is not set and uses OLD behavior. Use the
1559 cmake_policy() command to set it to OLD or NEW explicitly.
1560
1561 NOTE:
1562 The OLD behavior of a policy is deprecated by definition and may be
1563 removed in a future version of CMake.
1564
1566 CMP0069
1567 New in version 3.9.
1568
1569
1570 INTERPROCEDURAL_OPTIMIZATION is enforced when enabled.
1571
1572 CMake 3.9 and newer prefer to add IPO flags whenever the INTERPROCEDU‐
1573 RAL_OPTIMIZATION target property is enabled and produce an error if
1574 flags are not known to CMake for the current compiler. Since a given
1575 compiler may not support IPO flags in all environments in which it is
1576 used, it is now the project’s responsibility to use the CheckIPOSup‐
1577 ported module to check for support before enabling the INTERPROCEDU‐
1578 RAL_OPTIMIZATION target property. This approach allows a project to
1579 conditionally activate IPO when supported. It also allows an end user
1580 to set the CMAKE_INTERPROCEDURAL_OPTIMIZATION variable in an environ‐
1581 ment known to support IPO even if the project does not enable the prop‐
1582 erty.
1583
1584 Since CMake 3.8 and lower only honored INTERPROCEDURAL_OPTIMIZATION for
1585 the Intel compiler on Linux, some projects may unconditionally enable
1586 the target property. Policy CMP0069 provides compatibility with such
1587 projects.
1588
1589 This policy takes effect whenever the IPO property is enabled. The OLD
1590 behavior for this policy is to add IPO flags only for Intel compiler on
1591 Linux. The NEW behavior for this policy is to add IPO flags for the
1592 current compiler or produce an error if CMake does not know the flags.
1593
1594 This policy was introduced in CMake version 3.9. CMake version 3.19.7
1595 warns when the policy is not set and uses OLD behavior. Use the
1596 cmake_policy() command to set it to OLD or NEW explicitly.
1597
1598 NOTE:
1599 The OLD behavior of a policy is deprecated by definition and may be
1600 removed in a future version of CMake.
1601
1602 Examples
1603 Behave like CMake 3.8 and do not apply any IPO flags except for Intel
1604 compiler on Linux:
1605
1606 cmake_minimum_required(VERSION 3.8)
1607 project(foo)
1608
1609 # ...
1610
1611 set_property(TARGET ... PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
1612
1613 Use the CheckIPOSupported module to detect whether IPO is supported by
1614 the current compiler, environment, and CMake version. Produce a fatal
1615 error if support is not available:
1616
1617 cmake_minimum_required(VERSION 3.9) # CMP0069 NEW
1618 project(foo)
1619
1620 include(CheckIPOSupported)
1621 check_ipo_supported()
1622
1623 # ...
1624
1625 set_property(TARGET ... PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
1626
1627 Apply IPO flags only if compiler supports it:
1628
1629 cmake_minimum_required(VERSION 3.9) # CMP0069 NEW
1630 project(foo)
1631
1632 include(CheckIPOSupported)
1633
1634 # ...
1635
1636 check_ipo_supported(RESULT result)
1637 if(result)
1638 set_property(TARGET ... PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
1639 endif()
1640
1641 Apply IPO flags without any checks. This may lead to build errors if
1642 IPO is not supported by the compiler in the current environment. Pro‐
1643 duce an error if CMake does not know IPO flags for the current com‐
1644 piler:
1645
1646 cmake_minimum_required(VERSION 3.9) # CMP0069 NEW
1647 project(foo)
1648
1649 # ...
1650
1651 set_property(TARGET ... PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
1652
1653 CMP0068
1654 New in version 3.9.
1655
1656
1657 RPATH settings on macOS do not affect install_name.
1658
1659 CMake 3.9 and newer remove any effect the following settings may have
1660 on the install_name of a target on macOS:
1661
1662 · BUILD_WITH_INSTALL_RPATH target property
1663
1664 · SKIP_BUILD_RPATH target property
1665
1666 · CMAKE_SKIP_RPATH variable
1667
1668 · CMAKE_SKIP_INSTALL_RPATH variable
1669
1670 Previously, setting BUILD_WITH_INSTALL_RPATH had the effect of setting
1671 both the install_name of a target to INSTALL_NAME_DIR and the RPATH to
1672 INSTALL_RPATH. In CMake 3.9, it only affects setting of RPATH. How‐
1673 ever, if one wants INSTALL_NAME_DIR to apply to the target in the build
1674 tree, one may set BUILD_WITH_INSTALL_NAME_DIR.
1675
1676 If SKIP_BUILD_RPATH, CMAKE_SKIP_RPATH or CMAKE_SKIP_INSTALL_RPATH were
1677 used to strip the directory portion of the install_name of a target,
1678 one may set INSTALL_NAME_DIR="" instead.
1679
1680 The OLD behavior of this policy is to use the RPATH settings for
1681 install_name on macOS. The NEW behavior of this policy is to ignore
1682 the RPATH settings for install_name on macOS.
1683
1684 This policy was introduced in CMake version 3.9. CMake version 3.19.7
1685 warns when the policy is not set and uses OLD behavior. Use the
1686 cmake_policy() command to set it to OLD or NEW explicitly.
1687
1688 NOTE:
1689 The OLD behavior of a policy is deprecated by definition and may be
1690 removed in a future version of CMake.
1691
1693 CMP0067
1694 New in version 3.8.
1695
1696
1697 Honor language standard in try_compile() source-file signature.
1698
1699 The try_compile() source file signature is intended to allow callers to
1700 check whether they will be able to compile a given source file with the
1701 current toolchain. In order to match compiler behavior, any language
1702 standard mode should match. However, CMake 3.7 and below did not do
1703 this. CMake 3.8 and above prefer to honor the language standard set‐
1704 tings for C, CXX (C++), and CUDA using the values of the variables:
1705
1706 · CMAKE_C_STANDARD
1707
1708 · CMAKE_C_STANDARD_REQUIRED
1709
1710 · CMAKE_C_EXTENSIONS
1711
1712 · CMAKE_CXX_STANDARD
1713
1714 · CMAKE_CXX_STANDARD_REQUIRED
1715
1716 · CMAKE_CXX_EXTENSIONS
1717
1718 · CMAKE_CUDA_STANDARD
1719
1720 · CMAKE_CUDA_STANDARD_REQUIRED
1721
1722 · CMAKE_CUDA_EXTENSIONS
1723
1724 This policy provides compatibility for projects that do not expect the
1725 language standard settings to be used automatically.
1726
1727 The OLD behavior of this policy is to ignore language standard setting
1728 variables when generating the try_compile test project. The NEW behav‐
1729 ior of this policy is to honor language standard setting variables.
1730
1731 This policy was introduced in CMake version 3.8. Unlike most policies,
1732 CMake version 3.19.7 does not warn by default when this policy is not
1733 set and simply uses OLD behavior. See documentation of the CMAKE_POL‐
1734 ICY_WARNING_CMP0067 variable to control the warning.
1735
1736 NOTE:
1737 The OLD behavior of a policy is deprecated by definition and may be
1738 removed in a future version of CMake.
1739
1741 CMP0066
1742 New in version 3.7.
1743
1744
1745 Honor per-config flags in try_compile() source-file signature.
1746
1747 The source file signature of the try_compile() command uses the value
1748 of the CMAKE_<LANG>_FLAGS variable in the test project so that the test
1749 compilation works as it would in the main project. However, CMake 3.6
1750 and below do not also honor config-specific compiler flags such as
1751 those in the CMAKE_<LANG>_FLAGS_DEBUG variable. CMake 3.7 and above
1752 prefer to honor config-specific compiler flags too. This policy pro‐
1753 vides compatibility for projects that do not expect config-specific
1754 compiler flags to be used.
1755
1756 The OLD behavior of this policy is to ignore config-specific flag vari‐
1757 ables like CMAKE_<LANG>_FLAGS_DEBUG and only use CMake’s built-in
1758 defaults for the current compiler and platform.
1759
1760 The NEW behavior of this policy is to honor config-specific flag vari‐
1761 abldes like CMAKE_<LANG>_FLAGS_DEBUG.
1762
1763 This policy was introduced in CMake version 3.7. Unlike most policies,
1764 CMake version 3.19.7 does not warn by default when this policy is not
1765 set and simply uses OLD behavior. See documentation of the CMAKE_POL‐
1766 ICY_WARNING_CMP0066 variable to control the warning.
1767
1768 NOTE:
1769 The OLD behavior of a policy is deprecated by definition and may be
1770 removed in a future version of CMake.
1771
1773 CMP0065
1774 New in version 3.4.
1775
1776
1777 Do not add flags to export symbols from executables without the
1778 ENABLE_EXPORTS target property.
1779
1780 CMake 3.3 and below, for historical reasons, always linked executables
1781 on some platforms with flags like -rdynamic to export symbols from the
1782 executables for use by any plugins they may load via dlopen. CMake 3.4
1783 and above prefer to do this only for executables that are explicitly
1784 marked with the ENABLE_EXPORTS target property.
1785
1786 The OLD behavior of this policy is to always use the additional link
1787 flags when linking executables regardless of the value of the
1788 ENABLE_EXPORTS target property.
1789
1790 The NEW behavior of this policy is to only use the additional link
1791 flags when linking executables if the ENABLE_EXPORTS target property is
1792 set to True.
1793
1794 This policy was introduced in CMake version 3.4. Unlike most policies,
1795 CMake version 3.19.7 does not warn by default when this policy is not
1796 set and simply uses OLD behavior. See documentation of the CMAKE_POL‐
1797 ICY_WARNING_CMP0065 variable to control the warning.
1798
1799 NOTE:
1800 The OLD behavior of a policy is deprecated by definition and may be
1801 removed in a future version of CMake.
1802
1803 CMP0064
1804 New in version 3.4.
1805
1806
1807 Recognize TEST as a operator for the if() command.
1808
1809 The TEST operator was added to the if() command to determine if a given
1810 test name was created by the add_test() command.
1811
1812 The OLD behavior for this policy is to ignore the TEST operator. The
1813 NEW behavior is to interpret the TEST operator.
1814
1815 This policy was introduced in CMake version 3.4. CMake version 3.19.7
1816 warns when the policy is not set and uses OLD behavior. Use the
1817 cmake_policy() command to set it to OLD or NEW explicitly.
1818
1819 NOTE:
1820 The OLD behavior of a policy is deprecated by definition and may be
1821 removed in a future version of CMake.
1822
1824 CMP0063
1825 New in version 3.3.
1826
1827
1828 Honor visibility properties for all target types.
1829
1830 The <LANG>_VISIBILITY_PRESET and VISIBILITY_INLINES_HIDDEN target prop‐
1831 erties affect visibility of symbols during dynamic linking. When first
1832 introduced these properties affected compilation of sources only in
1833 shared libraries, module libraries, and executables with the
1834 ENABLE_EXPORTS property set. This was sufficient for the basic use
1835 cases of shared libraries and executables with plugins. However, some
1836 sources may be compiled as part of static libraries or object libraries
1837 and then linked into a shared library later. CMake 3.3 and above pre‐
1838 fer to honor these properties for sources compiled in all target types.
1839 This policy preserves compatibility for projects expecting the proper‐
1840 ties to work only for some target types.
1841
1842 The OLD behavior for this policy is to ignore the visibility properties
1843 for static libraries, object libraries, and executables without
1844 exports. The NEW behavior for this policy is to honor the visibility
1845 properties for all target types.
1846
1847 This policy was introduced in CMake version 3.3. CMake version 3.19.7
1848 warns when the policy is not set and uses OLD behavior. Use the
1849 cmake_policy() command to set it to OLD or NEW explicitly.
1850
1851 NOTE:
1852 The OLD behavior of a policy is deprecated by definition and may be
1853 removed in a future version of CMake.
1854
1855 CMP0062
1856 New in version 3.3.
1857
1858
1859 Disallow install() of export() result.
1860
1861 The export() command generates a file containing Imported Targets,
1862 which is suitable for use from the build directory. It is not suitable
1863 for installation because it contains absolute paths to buildsystem
1864 locations, and is particular to a single build configuration.
1865
1866 The install(EXPORT) generates and installs files which contain Imported
1867 Targets. These files are generated with relative paths (unless the
1868 user specifies absolute paths), and are designed for multi-configura‐
1869 tion use. See Creating Packages for more.
1870
1871 CMake 3.3 no longer allows the use of the install(FILES) command with
1872 the result of the export() command.
1873
1874 The OLD behavior for this policy is to allow installing the result of
1875 an export() command. The NEW behavior for this policy is not to allow
1876 installing the result of an export() command.
1877
1878 This policy was introduced in CMake version 3.3. CMake version 3.19.7
1879 warns when the policy is not set and uses OLD behavior. Use the
1880 cmake_policy() command to set it to OLD or NEW explicitly.
1881
1882 NOTE:
1883 The OLD behavior of a policy is deprecated by definition and may be
1884 removed in a future version of CMake.
1885
1886 CMP0061
1887 New in version 3.3.
1888
1889
1890 CTest does not by default tell make to ignore errors (-i).
1891
1892 The ctest_build() and build_command() commands no longer generate build
1893 commands for Makefile Generators with the -i option. Previously this
1894 was done to help build as much of tested projects as possible. How‐
1895 ever, this behavior is not consistent with other generators and also
1896 causes the return code of the make tool to be meaningless.
1897
1898 Of course users may still add this option manually by setting
1899 CTEST_BUILD_COMMAND or the MAKECOMMAND cache entry. See the CTest
1900 Build Step MakeCommand setting documentation for their effects.
1901
1902 The OLD behavior for this policy is to add -i to make calls in CTest.
1903 The NEW behavior for this policy is to not add -i.
1904
1905 This policy was introduced in CMake version 3.3. Unlike most policies,
1906 CMake version 3.19.7 does not warn when this policy is not set and sim‐
1907 ply uses OLD behavior.
1908
1909 NOTE:
1910 The OLD behavior of a policy is deprecated by definition and may be
1911 removed in a future version of CMake.
1912
1913 CMP0060
1914 New in version 3.3.
1915
1916
1917 Link libraries by full path even in implicit directories.
1918
1919 Policy CMP0003 was introduced with the intention of always linking
1920 library files by full path when a full path is given to the tar‐
1921 get_link_libraries() command. However, on some platforms (e.g. HP-UX)
1922 the compiler front-end adds alternative library search paths for the
1923 current architecture (e.g. /usr/lib/<arch> has alternatives to
1924 libraries in /usr/lib for the current architecture). On such platforms
1925 the find_library() may find a library such as /usr/lib/libfoo.so that
1926 does not belong to the current architecture.
1927
1928 Prior to policy CMP0003 projects would still build in such cases
1929 because the incorrect library path would be converted to -lfoo on the
1930 link line and the linker would find the proper library in the arch-spe‐
1931 cific search path provided by the compiler front-end implicitly. At
1932 the time we chose to remain compatible with such projects by always
1933 converting library files found in implicit link directories to -lfoo
1934 flags to ask the linker to search for them. This approach allowed
1935 existing projects to continue to build while still linking to libraries
1936 outside implicit link directories via full path (such as those in the
1937 build tree).
1938
1939 CMake does allow projects to override this behavior by using an
1940 IMPORTED library target with its IMPORTED_LOCATION property set to the
1941 desired full path to a library file. In fact, many Find Modules are
1942 learning to provide Imported Targets instead of just the traditional
1943 Foo_LIBRARIES variable listing library files. However, this makes the
1944 link line generated for a library found by a Find Module depend on
1945 whether it is linked through an imported target or not, which is incon‐
1946 sistent. Furthermore, this behavior has been a source of confusion
1947 because the generated link line for a library file depends on its loca‐
1948 tion. It is also problematic for projects trying to link statically
1949 because flags like -Wl,-Bstatic -lfoo -Wl,-Bdynamic may be used to help
1950 the linker select libfoo.a instead of libfoo.so but then leak dynamic
1951 linking to following libraries. (See the LINK_SEARCH_END_STATIC target
1952 property for a solution typically used for that problem.)
1953
1954 When the special case for libraries in implicit link directories was
1955 first introduced the list of implicit link directories was simply
1956 hard-coded (e.g. /lib, /usr/lib, and a few others). Since that time,
1957 CMake has learned to detect the implicit link directories used by the
1958 compiler front-end. If necessary, the find_library() command could be
1959 taught to use this information to help find libraries of the proper
1960 architecture.
1961
1962 For these reasons, CMake 3.3 and above prefer to drop the special case
1963 and link libraries by full path even when they are in implicit link
1964 directories. Policy CMP0060 provides compatibility for existing
1965 projects.
1966
1967 The OLD behavior for this policy is to ask the linker to search for
1968 libraries whose full paths are known to be in implicit link directo‐
1969 ries. The NEW behavior for this policy is to link libraries by full
1970 path even if they are in implicit link directories.
1971
1972 This policy was introduced in CMake version 3.3. Unlike most policies,
1973 CMake version 3.19.7 does not warn by default when this policy is not
1974 set and simply uses OLD behavior. See documentation of the CMAKE_POL‐
1975 ICY_WARNING_CMP0060 variable to control the warning.
1976
1977 NOTE:
1978 The OLD behavior of a policy is deprecated by definition and may be
1979 removed in a future version of CMake.
1980
1981 CMP0059
1982 New in version 3.3.
1983
1984
1985 Do not treat DEFINITIONS as a built-in directory property.
1986
1987 CMake 3.3 and above no longer make a list of definitions available
1988 through the DEFINITIONS directory property. The COMPILE_DEFINITIONS
1989 directory property may be used instead.
1990
1991 The OLD behavior for this policy is to provide the list of flags given
1992 so far to the add_definitions() command. The NEW behavior is to behave
1993 as a normal user-defined directory property.
1994
1995 This policy was introduced in CMake version 3.3. CMake version 3.19.7
1996 warns when the policy is not set and uses OLD behavior. Use the
1997 cmake_policy() command to set it to OLD or NEW explicitly.
1998
1999 NOTE:
2000 The OLD behavior of a policy is deprecated by definition and may be
2001 removed in a future version of CMake.
2002
2003 CMP0058
2004 New in version 3.3.
2005
2006
2007 Ninja requires custom command byproducts to be explicit.
2008
2009 When an intermediate file generated during the build is consumed by an
2010 expensive operation or a large tree of dependents, one may reduce the
2011 work needed for an incremental rebuild by updating the file timestamp
2012 only when its content changes. With this approach the generation rule
2013 must have a separate output file that is always updated with a new
2014 timestamp that is newer than any dependencies of the rule so that the
2015 build tool re-runs the rule only when the input changes. We refer to
2016 the separate output file as a rule’s witness and the generated file as
2017 a rule’s byproduct.
2018
2019 Byproducts may not be listed as outputs because their timestamps are
2020 allowed to be older than the inputs. No build tools (like make) that
2021 existed when CMake was designed have a way to express byproducts.
2022 Therefore CMake versions prior to 3.2 had no way to specify them.
2023 Projects typically left byproducts undeclared in the rules that gener‐
2024 ate them. For example:
2025
2026 add_custom_command(
2027 OUTPUT witness.txt
2028 COMMAND ${CMAKE_COMMAND} -E copy_if_different
2029 ${CMAKE_CURRENT_SOURCE_DIR}/input.txt
2030 byproduct.txt # timestamp may not change
2031 COMMAND ${CMAKE_COMMAND} -E touch witness.txt
2032 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/input.txt
2033 )
2034 add_custom_target(Provider DEPENDS witness.txt)
2035 add_custom_command(
2036 OUTPUT generated.c
2037 COMMAND expensive-task -i byproduct.txt -o generated.c
2038 DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/byproduct.txt
2039 )
2040 add_library(Consumer generated.c)
2041 add_dependencies(Consumer Provider)
2042
2043 This works well for all generators except Ninja. The Ninja build tool
2044 sees a rule listing byproduct.txt as a dependency and no rule listing
2045 it as an output. Ninja then complains that there is no way to satisfy
2046 the dependency and stops building even though there are order-only
2047 dependencies that ensure byproduct.txt will exist before its consumers
2048 need it. See discussion of this problem in Ninja Issue 760 for further
2049 details on why Ninja works this way.
2050
2051 Instead of leaving byproducts undeclared in the rules that generate
2052 them, Ninja expects byproducts to be listed along with other outputs.
2053 Such rules may be marked with a restat option that tells Ninja to check
2054 the timestamps of outputs after the rules run. This prevents byprod‐
2055 ucts whose timestamps do not change from causing their dependents to
2056 re-build unnecessarily.
2057
2058 Since the above approach does not tell CMake what custom command gener‐
2059 ates byproduct.txt, the Ninja generator does not have enough informa‐
2060 tion to add the byproduct as an output of any rule. CMake 2.8.12 and
2061 above work around this problem and allow projects using the above
2062 approach to build by generating phony build rules to tell Ninja to tol‐
2063 erate such missing files. However, this workaround prevents Ninja from
2064 diagnosing a dependency that is really missing. It also works poorly
2065 in in-source builds where every custom command dependency, even on
2066 source files, needs to be treated this way because CMake does not have
2067 enough information to know which files are generated as byproducts of
2068 custom commands.
2069
2070 CMake 3.2 introduced the BYPRODUCTS option to the add_custom_command()
2071 and add_custom_target() commands. This option allows byproducts to be
2072 specified explicitly:
2073
2074 add_custom_command(
2075 OUTPUT witness.txt
2076 BYPRODUCTS byproduct.txt # explicit byproduct specification
2077 COMMAND ${CMAKE_COMMAND} -E copy_if_different
2078 ${CMAKE_CURRENT_SOURCE_DIR}/input.txt
2079 byproduct.txt # timestamp may not change
2080 ...
2081
2082 The BYPRODUCTS option is used by the Ninja generator to list byproducts
2083 among the outputs of the custom commands that generate them, and is
2084 ignored by other generators.
2085
2086 CMake 3.3 and above prefer to require projects to specify custom com‐
2087 mand byproducts explicitly so that it can avoid using the phony rule
2088 workaround altogether. Policy CMP0058 was introduced to provide com‐
2089 patibility with existing projects that still need the workaround.
2090
2091 This policy has no effect on generators other than Ninja. The OLD
2092 behavior for this policy is to generate Ninja phony rules for unknown
2093 dependencies in the build tree. The NEW behavior for this policy is to
2094 not generate these and instead require projects to specify custom com‐
2095 mand BYPRODUCTS explicitly.
2096
2097 This policy was introduced in CMake version 3.3. CMake version 3.19.7
2098 warns when it sees unknown dependencies in out-of-source build trees if
2099 the policy is not set and then uses OLD behavior. Use the cmake_pol‐
2100 icy() command to set the policy to OLD or NEW explicitly. The policy
2101 setting must be in scope at the end of the top-level CMakeLists.txt
2102 file of the project and has global effect.
2103
2104 NOTE:
2105 The OLD behavior of a policy is deprecated by definition and may be
2106 removed in a future version of CMake.
2107
2108 CMP0057
2109 New in version 3.3.
2110
2111
2112 Support new if() IN_LIST operator.
2113
2114 CMake 3.3 adds support for the new IN_LIST operator.
2115
2116 The OLD behavior for this policy is to ignore the IN_LIST operator.
2117 The NEW behavior is to interpret the IN_LIST operator.
2118
2119 This policy was introduced in CMake version 3.3. CMake version 3.19.7
2120 warns when the policy is not set and uses OLD behavior. Use the
2121 cmake_policy() command to set it to OLD or NEW explicitly.
2122
2123 NOTE:
2124 The OLD behavior of a policy is deprecated by definition and may be
2125 removed in a future version of CMake.
2126
2128 CMP0056
2129 New in version 3.2.
2130
2131
2132 Honor link flags in try_compile() source-file signature.
2133
2134 The try_compile() command source-file signature generates a CMake‐
2135 Lists.txt file to build the source file into an executable. In order
2136 to compile the source the same way as it might be compiled by the call‐
2137 ing project, the generated project sets the value of the
2138 CMAKE_<LANG>_FLAGS variable to that in the calling project. The value
2139 of the CMAKE_EXE_LINKER_FLAGS variable may be needed in some cases too,
2140 but CMake 3.1 and lower did not set it in the generated project. CMake
2141 3.2 and above prefer to set it so that linker flags are honored as well
2142 as compiler flags. This policy provides compatibility with the pre-3.2
2143 behavior.
2144
2145 The OLD behavior for this policy is to not set the value of the
2146 CMAKE_EXE_LINKER_FLAGS variable in the generated test project. The NEW
2147 behavior for this policy is to set the value of the
2148 CMAKE_EXE_LINKER_FLAGS variable in the test project to the same as it
2149 is in the calling project.
2150
2151 If the project code does not set the policy explicitly, users may set
2152 it on the command line by defining the CMAKE_POLICY_DEFAULT_CMP0056
2153 variable in the cache.
2154
2155 This policy was introduced in CMake version 3.2. Unlike most policies,
2156 CMake version 3.19.7 does not warn by default when this policy is not
2157 set and simply uses OLD behavior. See documentation of the CMAKE_POL‐
2158 ICY_WARNING_CMP0056 variable to control the warning.
2159
2160 NOTE:
2161 The OLD behavior of a policy is deprecated by definition and may be
2162 removed in a future version of CMake.
2163
2164 CMP0055
2165 New in version 3.2.
2166
2167
2168 Strict checking for the break() command.
2169
2170 CMake 3.1 and lower allowed calls to the break() command outside of a
2171 loop context and also ignored any given arguments. This was undefined
2172 behavior.
2173
2174 The OLD behavior for this policy is to allow break() to be placed out‐
2175 side of loop contexts and ignores any arguments. The NEW behavior for
2176 this policy is to issue an error if a misplaced break or any arguments
2177 are found.
2178
2179 This policy was introduced in CMake version 3.2. CMake version 3.19.7
2180 warns when the policy is not set and uses OLD behavior. Use the
2181 cmake_policy() command to set it to OLD or NEW explicitly.
2182
2183 NOTE:
2184 The OLD behavior of a policy is deprecated by definition and may be
2185 removed in a future version of CMake.
2186
2188 CMP0054
2189 New in version 3.1.
2190
2191
2192 Only interpret if() arguments as variables or keywords when unquoted.
2193
2194 CMake 3.1 and above no longer implicitly dereference variables or
2195 interpret keywords in an if() command argument when it is a Quoted
2196 Argument or a Bracket Argument.
2197
2198 The OLD behavior for this policy is to dereference variables and inter‐
2199 pret keywords even if they are quoted or bracketed. The NEW behavior
2200 is to not dereference variables or interpret keywords that have been
2201 quoted or bracketed.
2202
2203 Given the following partial example:
2204
2205 set(A E)
2206 set(E "")
2207
2208 if("${A}" STREQUAL "")
2209 message("Result is TRUE before CMake 3.1 or when CMP0054 is OLD")
2210 else()
2211 message("Result is FALSE in CMake 3.1 and above if CMP0054 is NEW")
2212 endif()
2213
2214 After explicit expansion of variables this gives:
2215
2216 if("E" STREQUAL "")
2217
2218 With the policy set to OLD implicit expansion reduces this semantically
2219 to:
2220
2221 if("" STREQUAL "")
2222
2223 With the policy set to NEW the quoted arguments will not be further
2224 dereferenced:
2225
2226 if("E" STREQUAL "")
2227
2228 This policy was introduced in CMake version 3.1. CMake version 3.19.7
2229 warns when the policy is not set and uses OLD behavior. Use the
2230 cmake_policy() command to set it to OLD or NEW explicitly.
2231
2232 NOTE:
2233 The OLD behavior of a policy is deprecated by definition and may be
2234 removed in a future version of CMake.
2235
2236 CMP0053
2237 New in version 3.1.
2238
2239
2240 Simplify variable reference and escape sequence evaluation.
2241
2242 CMake 3.1 introduced a much faster implementation of evaluation of the
2243 Variable References and Escape Sequences documented in the cmake-lan‐
2244 guage(7) manual. While the behavior is identical to the legacy imple‐
2245 mentation in most cases, some corner cases were cleaned up to simplify
2246 the behavior. Specifically:
2247
2248 · Expansion of @VAR@ reference syntax defined by the configure_file()
2249 and string(CONFIGURE) commands is no longer performed in other con‐
2250 texts.
2251
2252 · Literal ${VAR} reference syntax may contain only alphanumeric charac‐
2253 ters (A-Z, a-z, 0-9) and the characters _, ., /, -, and +. Note that
2254 $ is technically allowed in the NEW behavior, but is invalid for OLD
2255 behavior. This is due to an oversight during the implementation of
2256 CMP0053 and its use as a literal variable reference is discouraged
2257 for this reason. Variables with other characters in their name may
2258 still be referenced indirectly, e.g.
2259
2260 set(varname "otherwise & disallowed $ characters")
2261 message("${${varname}}")
2262
2263 · The setting of policy CMP0010 is not considered, so improper variable
2264 reference syntax is always an error.
2265
2266 · More characters are allowed to be escaped in variable names. Previ‐
2267 ously, only ()#" \@^ were valid characters to escape. Now any
2268 non-alphanumeric, non-semicolon, non-NUL character may be escaped
2269 following the escape_identity production in the Escape Sequences sec‐
2270 tion of the cmake-language(7) manual.
2271
2272 The OLD behavior for this policy is to honor the legacy behavior for
2273 variable references and escape sequences. The NEW behavior is to use
2274 the simpler variable expansion and escape sequence evaluation rules.
2275
2276 This policy was introduced in CMake version 3.1. CMake version 3.19.7
2277 warns when the policy is not set and uses OLD behavior. Use the
2278 cmake_policy() command to set it to OLD or NEW explicitly.
2279
2280 NOTE:
2281 The OLD behavior of a policy is deprecated by definition and may be
2282 removed in a future version of CMake.
2283
2284 CMP0052
2285 New in version 3.1.
2286
2287
2288 Reject source and build dirs in installed INTERFACE_INCLUDE_DIRECTO‐
2289 RIES.
2290
2291 CMake 3.0 and lower allowed subdirectories of the source directory or
2292 build directory to be in the INTERFACE_INCLUDE_DIRECTORIES of installed
2293 and exported targets, if the directory was also a subdirectory of the
2294 installation prefix. This makes the installation depend on the exis‐
2295 tence of the source dir or binary dir, and the installation will be
2296 broken if either are removed after installation.
2297
2298 See Include Directories and Usage Requirements for more on specifying
2299 include directories for targets.
2300
2301 The OLD behavior for this policy is to export the content of the INTER‐
2302 FACE_INCLUDE_DIRECTORIES with the source or binary directory. The NEW
2303 behavior for this policy is to issue an error if such a directory is
2304 used.
2305
2306 This policy was introduced in CMake version 3.1. CMake version 3.19.7
2307 warns when the policy is not set and uses OLD behavior. Use the
2308 cmake_policy() command to set it to OLD or NEW explicitly.
2309
2310 NOTE:
2311 The OLD behavior of a policy is deprecated by definition and may be
2312 removed in a future version of CMake.
2313
2314 CMP0051
2315 New in version 3.1.
2316
2317
2318 List TARGET_OBJECTS in SOURCES target property.
2319
2320 CMake 3.0 and lower did not include the TARGET_OBJECTS generator
2321 expression when returning the SOURCES target property.
2322
2323 Configure-time CMake code is not able to handle generator expressions.
2324 If using the SOURCES target property at configure time, it may be nec‐
2325 essary to first remove generator expressions using the
2326 string(GENEX_STRIP) command. Generate-time CMake code such as
2327 file(GENERATE) can handle the content without stripping.
2328
2329 The OLD behavior for this policy is to omit TARGET_OBJECTS expressions
2330 from the SOURCES target property. The NEW behavior for this policy is
2331 to include TARGET_OBJECTS expressions in the output.
2332
2333 This policy was introduced in CMake version 3.1. CMake version 3.19.7
2334 warns when the policy is not set and uses OLD behavior. Use the
2335 cmake_policy() command to set it to OLD or NEW explicitly.
2336
2337 NOTE:
2338 The OLD behavior of a policy is deprecated by definition and may be
2339 removed in a future version of CMake.
2340
2342 CMP0050
2343 Disallow add_custom_command SOURCE signatures.
2344
2345 CMake 2.8.12 and lower allowed a signature for add_custom_command()
2346 which specified an input to a command. This was undocumented behavior.
2347 Modern use of CMake associates custom commands with their output,
2348 rather than their input.
2349
2350 The OLD behavior for this policy is to allow the use of add_custom_com‐
2351 mand() SOURCE signatures. The NEW behavior for this policy is to issue
2352 an error if such a signature is used.
2353
2354 This policy was introduced in CMake version 3.0. CMake version 3.19.7
2355 warns when the policy is not set and uses OLD behavior. Use the
2356 cmake_policy() command to set it to OLD or NEW explicitly.
2357
2358 NOTE:
2359 The OLD behavior of a policy is deprecated by definition and may be
2360 removed in a future version of CMake.
2361
2362 CMP0049
2363 Do not expand variables in target source entries.
2364
2365 CMake 2.8.12 and lower performed an extra layer of variable expansion
2366 when evaluating source file names:
2367
2368 set(a_source foo.c)
2369 add_executable(foo \${a_source})
2370
2371 This was undocumented behavior.
2372
2373 The OLD behavior for this policy is to expand such variables when pro‐
2374 cessing the target sources. The NEW behavior for this policy is to
2375 issue an error if such variables need to be expanded.
2376
2377 This policy was introduced in CMake version 3.0. CMake version 3.19.7
2378 warns when the policy is not set and uses OLD behavior. Use the
2379 cmake_policy() command to set it to OLD or NEW explicitly.
2380
2381 NOTE:
2382 The OLD behavior of a policy is deprecated by definition and may be
2383 removed in a future version of CMake.
2384
2385 CMP0048
2386 The project() command manages VERSION variables.
2387
2388 CMake version 3.0 introduced the VERSION option of the project() com‐
2389 mand to specify a project version as well as the name. In order to
2390 keep PROJECT_VERSION and related variables consistent with variable
2391 PROJECT_NAME it is necessary to set the VERSION variables to the empty
2392 string when no VERSION is given to project(). However, this can change
2393 behavior for existing projects that set VERSION variables themselves
2394 since project() may now clear them. This policy controls the behavior
2395 for compatibility with such projects.
2396
2397 The OLD behavior for this policy is to leave VERSION variables
2398 untouched. The NEW behavior for this policy is to set VERSION as docu‐
2399 mented by the project() command.
2400
2401 This policy was introduced in CMake version 3.0. CMake version 3.19.7
2402 warns when the policy is not set and uses OLD behavior. Use the
2403 cmake_policy() command to set it to OLD or NEW explicitly.
2404
2405 NOTE:
2406 The OLD behavior of a policy is deprecated by definition and may be
2407 removed in a future version of CMake.
2408
2409 CMP0047
2410 Use QCC compiler id for the qcc drivers on QNX.
2411
2412 CMake 3.0 and above recognize that the QNX qcc compiler driver is dif‐
2413 ferent from the GNU compiler. CMake now prefers to present this to
2414 projects by setting the CMAKE_<LANG>_COMPILER_ID variable to QCC
2415 instead of GNU. However, existing projects may assume the compiler id
2416 for QNX qcc is just GNU as it was in CMake versions prior to 3.0.
2417 Therefore this policy determines for QNX qcc which compiler id to
2418 report in the CMAKE_<LANG>_COMPILER_ID variable after language <LANG>
2419 is enabled by the project() or enable_language() command. The policy
2420 must be set prior to the invocation of either command.
2421
2422 The OLD behavior for this policy is to use the GNU compiler id for the
2423 qcc and QCC compiler drivers. The NEW behavior for this policy is to
2424 use the QCC compiler id for those drivers.
2425
2426 This policy was introduced in CMake version 3.0. Use the cmake_pol‐
2427 icy() command to set this policy to OLD or NEW explicitly. Unlike most
2428 policies, CMake version 3.19.7 does not warn by default when this pol‐
2429 icy is not set and simply uses OLD behavior. See documentation of the
2430 CMAKE_POLICY_WARNING_CMP0047 variable to control the warning.
2431
2432 NOTE:
2433 The OLD behavior of a policy is deprecated by definition and may be
2434 removed in a future version of CMake.
2435
2436 CMP0046
2437 Error on non-existent dependency in add_dependencies.
2438
2439 CMake 2.8.12 and lower silently ignored non-existent dependencies
2440 listed in the add_dependencies() command.
2441
2442 The OLD behavior for this policy is to silently ignore non-existent
2443 dependencies. The NEW behavior for this policy is to report an error if
2444 non-existent dependencies are listed in the add_dependencies() command.
2445
2446 This policy was introduced in CMake version 3.0. CMake version 3.19.7
2447 warns when the policy is not set and uses OLD behavior. Use the
2448 cmake_policy() command to set it to OLD or NEW explicitly.
2449
2450 NOTE:
2451 The OLD behavior of a policy is deprecated by definition and may be
2452 removed in a future version of CMake.
2453
2454 CMP0045
2455 Error on non-existent target in get_target_property.
2456
2457 In CMake 2.8.12 and lower, the get_target_property() command accepted a
2458 non-existent target argument without issuing any error or warning. The
2459 result variable is set to a -NOTFOUND value.
2460
2461 The OLD behavior for this policy is to issue no warning and set the
2462 result variable to a -NOTFOUND value. The NEW behavior for this policy
2463 is to issue a FATAL_ERROR if the command is called with a non-existent
2464 target.
2465
2466 This policy was introduced in CMake version 3.0. CMake version 3.19.7
2467 warns when the policy is not set and uses OLD behavior. Use the
2468 cmake_policy() command to set it to OLD or NEW explicitly.
2469
2470 NOTE:
2471 The OLD behavior of a policy is deprecated by definition and may be
2472 removed in a future version of CMake.
2473
2474 CMP0044
2475 Case sensitive <LANG>_COMPILER_ID generator expressions
2476
2477 CMake 2.8.12 introduced the <LANG>_COMPILER_ID generator expressions to
2478 allow comparison of the CMAKE_<LANG>_COMPILER_ID with a test value.
2479 The possible valid values are lowercase, but the comparison with the
2480 test value was performed case-insensitively.
2481
2482 The OLD behavior for this policy is to perform a case-insensitive com‐
2483 parison with the value in the <LANG>_COMPILER_ID expression. The NEW
2484 behavior for this policy is to perform a case-sensitive comparison with
2485 the value in the <LANG>_COMPILER_ID expression.
2486
2487 This policy was introduced in CMake version 3.0. CMake version 3.19.7
2488 warns when the policy is not set and uses OLD behavior. Use the
2489 cmake_policy() command to set it to OLD or NEW explicitly.
2490
2491 NOTE:
2492 The OLD behavior of a policy is deprecated by definition and may be
2493 removed in a future version of CMake.
2494
2495 CMP0043
2496 Ignore COMPILE_DEFINITIONS_<Config> properties
2497
2498 CMake 2.8.12 and lower allowed setting the COMPILE_DEFINITIONS_<CONFIG>
2499 target property and COMPILE_DEFINITIONS_<CONFIG> directory property to
2500 apply configuration-specific compile definitions.
2501
2502 Since CMake 2.8.10, the COMPILE_DEFINITIONS property has supported gen‐
2503 erator expressions for setting configuration-dependent content. The
2504 continued existence of the suffixed variables is redundant, and causes
2505 a maintenance burden. Population of the COMPILE_DEFINITIONS_DEBUG
2506 property may be replaced with a population of COMPILE_DEFINITIONS
2507 directly or via target_compile_definitions():
2508
2509 # Old Interfaces:
2510 set_property(TARGET tgt APPEND PROPERTY
2511 COMPILE_DEFINITIONS_DEBUG DEBUG_MODE
2512 )
2513 set_property(DIRECTORY APPEND PROPERTY
2514 COMPILE_DEFINITIONS_DEBUG DIR_DEBUG_MODE
2515 )
2516
2517 # New Interfaces:
2518 set_property(TARGET tgt APPEND PROPERTY
2519 COMPILE_DEFINITIONS $<$<CONFIG:Debug>:DEBUG_MODE>
2520 )
2521 target_compile_definitions(tgt PRIVATE $<$<CONFIG:Debug>:DEBUG_MODE>)
2522 set_property(DIRECTORY APPEND PROPERTY
2523 COMPILE_DEFINITIONS $<$<CONFIG:Debug>:DIR_DEBUG_MODE>
2524 )
2525
2526 The OLD behavior for this policy is to consume the content of the suf‐
2527 fixed COMPILE_DEFINITIONS_<CONFIG> target property when generating the
2528 compilation command. The NEW behavior for this policy is to ignore the
2529 content of the COMPILE_DEFINITIONS_<CONFIG> target property .
2530
2531 This policy was introduced in CMake version 3.0. CMake version 3.19.7
2532 warns when the policy is not set and uses OLD behavior. Use the
2533 cmake_policy() command to set it to OLD or NEW explicitly.
2534
2535 NOTE:
2536 The OLD behavior of a policy is deprecated by definition and may be
2537 removed in a future version of CMake.
2538
2539 CMP0042
2540 MACOSX_RPATH is enabled by default.
2541
2542 CMake 2.8.12 and newer has support for using @rpath in a target’s
2543 install name. This was enabled by setting the target property
2544 MACOSX_RPATH. The @rpath in an install name is a more flexible and
2545 powerful mechanism than @executable_path or @loader_path for locating
2546 shared libraries.
2547
2548 CMake 3.0 and later prefer this property to be ON by default. Projects
2549 wanting @rpath in a target’s install name may remove any setting of the
2550 INSTALL_NAME_DIR and CMAKE_INSTALL_NAME_DIR variables.
2551
2552 This policy was introduced in CMake version 3.0. CMake version 3.19.7
2553 warns when the policy is not set and uses OLD behavior. Use the
2554 cmake_policy() command to set it to OLD or NEW explicitly.
2555
2556 NOTE:
2557 The OLD behavior of a policy is deprecated by definition and may be
2558 removed in a future version of CMake.
2559
2560 CMP0041
2561 Error on relative include with generator expression.
2562
2563 Diagnostics in CMake 2.8.12 and lower silently ignored an entry in the
2564 INTERFACE_INCLUDE_DIRECTORIES of a target if it contained a generator
2565 expression at any position.
2566
2567 The path entries in that target property should not be relative.
2568 High-level API should ensure that by adding either a source directory
2569 or a install directory prefix, as appropriate.
2570
2571 As an additional diagnostic, the INTERFACE_INCLUDE_DIRECTORIES gener‐
2572 ated on an IMPORTED target for the install location should not contain
2573 paths in the source directory or the build directory.
2574
2575 The OLD behavior for this policy is to ignore relative path entries if
2576 they contain a generator expression. The NEW behavior for this policy
2577 is to report an error if a generator expression appears in another
2578 location and the path is relative.
2579
2580 This policy was introduced in CMake version 3.0. CMake version 3.19.7
2581 warns when the policy is not set and uses OLD behavior. Use the
2582 cmake_policy() command to set it to OLD or NEW explicitly.
2583
2584 NOTE:
2585 The OLD behavior of a policy is deprecated by definition and may be
2586 removed in a future version of CMake.
2587
2588 CMP0040
2589 The target in the TARGET signature of add_custom_command() must exist
2590 and must be defined in the current directory.
2591
2592 CMake 2.8.12 and lower silently ignored a custom command created with
2593 the TARGET signature of add_custom_command() if the target is unknown
2594 or was defined outside the current directory.
2595
2596 The OLD behavior for this policy is to ignore custom commands for
2597 unknown targets. The NEW behavior for this policy is to report an
2598 error if the target referenced in add_custom_command() is unknown or
2599 was defined outside the current directory.
2600
2601 This policy was introduced in CMake version 3.0. CMake version 3.19.7
2602 warns when the policy is not set and uses OLD behavior. Use the
2603 cmake_policy() command to set it to OLD or NEW explicitly.
2604
2605 NOTE:
2606 The OLD behavior of a policy is deprecated by definition and may be
2607 removed in a future version of CMake.
2608
2609 CMP0039
2610 Utility targets may not have link dependencies.
2611
2612 CMake 2.8.12 and lower allowed using utility targets in the left hand
2613 side position of the target_link_libraries() command. This is an indi‐
2614 cator of a bug in user code.
2615
2616 The OLD behavior for this policy is to ignore attempts to set the link
2617 libraries of utility targets. The NEW behavior for this policy is to
2618 report an error if an attempt is made to set the link libraries of a
2619 utility target.
2620
2621 This policy was introduced in CMake version 3.0. CMake version 3.19.7
2622 warns when the policy is not set and uses OLD behavior. Use the
2623 cmake_policy() command to set it to OLD or NEW explicitly.
2624
2625 NOTE:
2626 The OLD behavior of a policy is deprecated by definition and may be
2627 removed in a future version of CMake.
2628
2629 CMP0038
2630 Targets may not link directly to themselves.
2631
2632 CMake 2.8.12 and lower allowed a build target to link to itself
2633 directly with a target_link_libraries() call. This is an indicator of a
2634 bug in user code.
2635
2636 The OLD behavior for this policy is to ignore targets which list them‐
2637 selves in their own link implementation. The NEW behavior for this
2638 policy is to report an error if a target attempts to link to itself.
2639
2640 This policy was introduced in CMake version 3.0. CMake version 3.19.7
2641 warns when the policy is not set and uses OLD behavior. Use the
2642 cmake_policy() command to set it to OLD or NEW explicitly.
2643
2644 NOTE:
2645 The OLD behavior of a policy is deprecated by definition and may be
2646 removed in a future version of CMake.
2647
2648 CMP0037
2649 Target names should not be reserved and should match a validity pat‐
2650 tern.
2651
2652 CMake 2.8.12 and lower allowed creating targets using add_library(),
2653 add_executable() and add_custom_target() with unrestricted choice for
2654 the target name. Newer cmake features such as cmake-generator-expres‐
2655 sions(7) and some diagnostics expect target names to match a restricted
2656 pattern.
2657
2658 Target names may contain upper and lower case letters, numbers, the
2659 underscore character (_), dot(.), plus(+) and minus(-). As a special
2660 case, ALIAS and IMPORTED targets may contain two consecutive colons.
2661
2662 Target names reserved by one or more CMake generators are not allowed.
2663 Among others these include all, clean, help, and install.
2664
2665 Target names associated with optional features, such as test and pack‐
2666 age, may also be reserved. CMake 3.10 and below always reserve them.
2667 CMake 3.11 and above reserve them only when the corresponding feature
2668 is enabled (e.g. by including the CTest or CPack modules).
2669
2670 The OLD behavior for this policy is to allow creating targets with
2671 reserved names or which do not match the validity pattern. The NEW
2672 behavior for this policy is to report an error if an add_* command is
2673 used with an invalid target name.
2674
2675 This policy was introduced in CMake version 3.0. CMake version 3.19.7
2676 warns when the policy is not set and uses OLD behavior. Use the
2677 cmake_policy() command to set it to OLD or NEW explicitly.
2678
2679 NOTE:
2680 The OLD behavior of a policy is deprecated by definition and may be
2681 removed in a future version of CMake.
2682
2683 CMP0036
2684 The build_name() command should not be called.
2685
2686 This command was added in May 2001 to compute a name for the current
2687 operating system and compiler combination. The command has long been
2688 documented as discouraged and replaced by the CMAKE_SYSTEM and
2689 CMAKE_<LANG>_COMPILER variables.
2690
2691 CMake >= 3.0 prefer that this command never be called. The OLD behav‐
2692 ior for this policy is to allow the command to be called. The NEW
2693 behavior for this policy is to issue a FATAL_ERROR when the command is
2694 called.
2695
2696 This policy was introduced in CMake version 3.0. CMake version 3.19.7
2697 warns when the policy is not set and uses OLD behavior. Use the
2698 cmake_policy() command to set it to OLD or NEW explicitly.
2699
2700 NOTE:
2701 The OLD behavior of a policy is deprecated by definition and may be
2702 removed in a future version of CMake.
2703
2704 CMP0035
2705 The variable_requires() command should not be called.
2706
2707 This command was introduced in November 2001 to perform some condi‐
2708 tional logic. It has long been replaced by the if() command.
2709
2710 CMake >= 3.0 prefer that this command never be called. The OLD behav‐
2711 ior for this policy is to allow the command to be called. The NEW
2712 behavior for this policy is to issue a FATAL_ERROR when the command is
2713 called.
2714
2715 This policy was introduced in CMake version 3.0. CMake version 3.19.7
2716 warns when the policy is not set and uses OLD behavior. Use the
2717 cmake_policy() command to set it to OLD or NEW explicitly.
2718
2719 NOTE:
2720 The OLD behavior of a policy is deprecated by definition and may be
2721 removed in a future version of CMake.
2722
2723 CMP0034
2724 The utility_source() command should not be called.
2725
2726 This command was introduced in March 2001 to help build executables
2727 used to generate other files. This approach has long been replaced by
2728 add_executable() combined with add_custom_command().
2729
2730 CMake >= 3.0 prefer that this command never be called. The OLD behav‐
2731 ior for this policy is to allow the command to be called. The NEW
2732 behavior for this policy is to issue a FATAL_ERROR when the command is
2733 called.
2734
2735 This policy was introduced in CMake version 3.0. CMake version 3.19.7
2736 warns when the policy is not set and uses OLD behavior. Use the
2737 cmake_policy() command to set it to OLD or NEW explicitly.
2738
2739 NOTE:
2740 The OLD behavior of a policy is deprecated by definition and may be
2741 removed in a future version of CMake.
2742
2743 CMP0033
2744 The export_library_dependencies() command should not be called.
2745
2746 This command was added in January 2003 to export <tgt>_LIB_DEPENDS
2747 internal CMake cache entries to a file for installation with a project.
2748 This was used at the time to allow transitive link dependencies to work
2749 for applications outside of the original build tree of a project. The
2750 functionality has been superseded by the export() and install(EXPORT)
2751 commands.
2752
2753 CMake >= 3.0 prefer that this command never be called. The OLD behav‐
2754 ior for this policy is to allow the command to be called. The NEW
2755 behavior for this policy is to issue a FATAL_ERROR when the command is
2756 called.
2757
2758 This policy was introduced in CMake version 3.0. CMake version 3.19.7
2759 warns when the policy is not set and uses OLD behavior. Use the
2760 cmake_policy() command to set it to OLD or NEW explicitly.
2761
2762 NOTE:
2763 The OLD behavior of a policy is deprecated by definition and may be
2764 removed in a future version of CMake.
2765
2766 CMP0032
2767 The output_required_files() command should not be called.
2768
2769 This command was added in June 2001 to expose the then-current CMake
2770 implicit dependency scanner. CMake’s real implicit dependency scanner
2771 has evolved since then but is not exposed through this command. The
2772 scanning capabilities of this command are very limited and this func‐
2773 tionality is better achieved through dedicated outside tools.
2774
2775 CMake >= 3.0 prefer that this command never be called. The OLD behav‐
2776 ior for this policy is to allow the command to be called. The NEW
2777 behavior for this policy is to issue a FATAL_ERROR when the command is
2778 called.
2779
2780 This policy was introduced in CMake version 3.0. CMake version 3.19.7
2781 warns when the policy is not set and uses OLD behavior. Use the
2782 cmake_policy() command to set it to OLD or NEW explicitly.
2783
2784 NOTE:
2785 The OLD behavior of a policy is deprecated by definition and may be
2786 removed in a future version of CMake.
2787
2788 CMP0031
2789 The load_command() command should not be called.
2790
2791 This command was added in August 2002 to allow projects to add arbi‐
2792 trary commands implemented in C or C++. However, it does not work when
2793 the toolchain in use does not match the ABI of the CMake process. It
2794 has been mostly superseded by the macro() and function() commands.
2795
2796 CMake >= 3.0 prefer that this command never be called. The OLD behav‐
2797 ior for this policy is to allow the command to be called. The NEW
2798 behavior for this policy is to issue a FATAL_ERROR when the command is
2799 called.
2800
2801 This policy was introduced in CMake version 3.0. CMake version 3.19.7
2802 warns when the policy is not set and uses OLD behavior. Use the
2803 cmake_policy() command to set it to OLD or NEW explicitly.
2804
2805 NOTE:
2806 The OLD behavior of a policy is deprecated by definition and may be
2807 removed in a future version of CMake.
2808
2809 CMP0030
2810 The use_mangled_mesa() command should not be called.
2811
2812 This command was created in September 2001 to support VTK before modern
2813 CMake language and custom command capabilities. VTK has not used it in
2814 years.
2815
2816 CMake >= 3.0 prefer that this command never be called. The OLD behav‐
2817 ior for this policy is to allow the command to be called. The NEW
2818 behavior for this policy is to issue a FATAL_ERROR when the command is
2819 called.
2820
2821 This policy was introduced in CMake version 3.0. CMake version 3.19.7
2822 warns when the policy is not set and uses OLD behavior. Use the
2823 cmake_policy() command to set it to OLD or NEW explicitly.
2824
2825 NOTE:
2826 The OLD behavior of a policy is deprecated by definition and may be
2827 removed in a future version of CMake.
2828
2829 CMP0029
2830 The subdir_depends() command should not be called.
2831
2832 The implementation of this command has been empty since December 2001
2833 but was kept in CMake for compatibility for a long time.
2834
2835 CMake >= 3.0 prefer that this command never be called. The OLD behav‐
2836 ior for this policy is to allow the command to be called. The NEW
2837 behavior for this policy is to issue a FATAL_ERROR when the command is
2838 called.
2839
2840 This policy was introduced in CMake version 3.0. CMake version 3.19.7
2841 warns when the policy is not set and uses OLD behavior. Use the
2842 cmake_policy() command to set it to OLD or NEW explicitly.
2843
2844 NOTE:
2845 The OLD behavior of a policy is deprecated by definition and may be
2846 removed in a future version of CMake.
2847
2848 CMP0028
2849 Double colon in target name means ALIAS or IMPORTED target.
2850
2851 CMake 2.8.12 and lower allowed the use of targets and files with double
2852 colons in target_link_libraries(), with some buildsystem generators.
2853
2854 The use of double-colons is a common pattern used to namespace IMPORTED
2855 targets and ALIAS targets. When computing the link dependencies of a
2856 target, the name of each dependency could either be a target, or a file
2857 on disk. Previously, if a target was not found with a matching name,
2858 the name was considered to refer to a file on disk. This can lead to
2859 confusing error messages if there is a typo in what should be a target
2860 name.
2861
2862 The OLD behavior for this policy is to search for targets, then files
2863 on disk, even if the search term contains double-colons. The NEW
2864 behavior for this policy is to issue a FATAL_ERROR if a link dependency
2865 contains double-colons but is not an IMPORTED target or an ALIAS tar‐
2866 get.
2867
2868 This policy was introduced in CMake version 3.0. CMake version 3.19.7
2869 warns when the policy is not set and uses OLD behavior. Use the
2870 cmake_policy() command to set it to OLD or NEW explicitly.
2871
2872 NOTE:
2873 The OLD behavior of a policy is deprecated by definition and may be
2874 removed in a future version of CMake.
2875
2876 CMP0027
2877 Conditionally linked imported targets with missing include directories.
2878
2879 CMake 2.8.11 introduced introduced the concept of INTER‐
2880 FACE_INCLUDE_DIRECTORIES, and a check at cmake time that the entries in
2881 the INTERFACE_INCLUDE_DIRECTORIES of an IMPORTED target actually exist.
2882 CMake 2.8.11 also introduced generator expression support in the tar‐
2883 get_link_libraries() command. However, if an imported target is linked
2884 as a result of a generator expression evaluation, the entries in the
2885 INTERFACE_INCLUDE_DIRECTORIES of that target were not checked for exis‐
2886 tence as they should be.
2887
2888 The OLD behavior of this policy is to report a warning if an entry in
2889 the INTERFACE_INCLUDE_DIRECTORIES of a generator-expression condition‐
2890 ally linked IMPORTED target does not exist.
2891
2892 The NEW behavior of this policy is to report an error if an entry in
2893 the INTERFACE_INCLUDE_DIRECTORIES of a generator-expression condition‐
2894 ally linked IMPORTED target does not exist.
2895
2896 This policy was introduced in CMake version 3.0. CMake version 3.19.7
2897 warns when the policy is not set and uses OLD behavior. Use the
2898 cmake_policy() command to set it to OLD or NEW explicitly.
2899
2900 NOTE:
2901 The OLD behavior of a policy is deprecated by definition and may be
2902 removed in a future version of CMake.
2903
2904 CMP0026
2905 Disallow use of the LOCATION property for build targets.
2906
2907 CMake 2.8.12 and lower allowed reading the LOCATION target property
2908 (and configuration-specific variants) to determine the eventual loca‐
2909 tion of build targets. This relies on the assumption that all neces‐
2910 sary information is available at configure-time to determine the final
2911 location and filename of the target. However, this property is not
2912 fully determined until later at generate-time. At generate time, the
2913 $<TARGET_FILE> generator expression can be used to determine the even‐
2914 tual LOCATION of a target output.
2915
2916 Code which reads the LOCATION target property can be ported to use the
2917 $<TARGET_FILE> generator expression together with the file(GENERATE)
2918 subcommand to generate a file containing the target location.
2919
2920 The OLD behavior for this policy is to allow reading the LOCATION prop‐
2921 erties from build-targets. The NEW behavior for this policy is to not
2922 to allow reading the LOCATION properties from build-targets.
2923
2924 This policy was introduced in CMake version 3.0. CMake version 3.19.7
2925 warns when the policy is not set and uses OLD behavior. Use the
2926 cmake_policy() command to set it to OLD or NEW explicitly.
2927
2928 NOTE:
2929 The OLD behavior of a policy is deprecated by definition and may be
2930 removed in a future version of CMake.
2931
2932 CMP0025
2933 Compiler id for Apple Clang is now AppleClang.
2934
2935 CMake 3.0 and above recognize that Apple Clang is a different compiler
2936 than upstream Clang and that they have different version numbers.
2937 CMake now prefers to present this to projects by setting the
2938 CMAKE_<LANG>_COMPILER_ID variable to AppleClang instead of Clang. How‐
2939 ever, existing projects may assume the compiler id for Apple Clang is
2940 just Clang as it was in CMake versions prior to 3.0. Therefore this
2941 policy determines for Apple Clang which compiler id to report in the
2942 CMAKE_<LANG>_COMPILER_ID variable after language <LANG> is enabled by
2943 the project() or enable_language() command. The policy must be set
2944 prior to the invocation of either command.
2945
2946 The OLD behavior for this policy is to use compiler id Clang. The NEW
2947 behavior for this policy is to use compiler id AppleClang.
2948
2949 This policy was introduced in CMake version 3.0. Use the cmake_pol‐
2950 icy() command to set this policy to OLD or NEW explicitly. Unlike most
2951 policies, CMake version 3.19.7 does not warn by default when this pol‐
2952 icy is not set and simply uses OLD behavior. See documentation of the
2953 CMAKE_POLICY_WARNING_CMP0025 variable to control the warning.
2954
2955 NOTE:
2956 The OLD behavior of a policy is deprecated by definition and may be
2957 removed in a future version of CMake.
2958
2959 CMP0024
2960 Disallow include export result.
2961
2962 CMake 2.8.12 and lower allowed use of the include() command with the
2963 result of the export() command. This relies on the assumption that the
2964 export() command has an immediate effect at configure-time during a
2965 cmake run. Certain properties of targets are not fully determined
2966 until later at generate-time, such as the link language and complete
2967 list of link libraries. Future refactoring will change the effect of
2968 the export() command to be executed at generate-time. Use ALIAS tar‐
2969 gets instead in cases where the goal is to refer to targets by another
2970 name.
2971
2972 The OLD behavior for this policy is to allow including the result of an
2973 export() command. The NEW behavior for this policy is not to allow
2974 including the result of an export() command.
2975
2976 This policy was introduced in CMake version 3.0. CMake version 3.19.7
2977 warns when the policy is not set and uses OLD behavior. Use the
2978 cmake_policy() command to set it to OLD or NEW explicitly.
2979
2980 NOTE:
2981 The OLD behavior of a policy is deprecated by definition and may be
2982 removed in a future version of CMake.
2983
2985 CMP0023
2986 Plain and keyword target_link_libraries() signatures cannot be mixed.
2987
2988 CMake 2.8.12 introduced the target_link_libraries() signature using the
2989 PUBLIC, PRIVATE, and INTERFACE keywords to generalize the LINK_PUBLIC
2990 and LINK_PRIVATE keywords introduced in CMake 2.8.7. Use of signatures
2991 with any of these keywords sets the link interface of a target explic‐
2992 itly, even if empty. This produces confusing behavior when used in
2993 combination with the historical behavior of the plain tar‐
2994 get_link_libraries() signature. For example, consider the code:
2995
2996 target_link_libraries(mylib A)
2997 target_link_libraries(mylib PRIVATE B)
2998
2999 After the first line the link interface has not been set explicitly so
3000 CMake would use the link implementation, A, as the link interface.
3001 However, the second line sets the link interface to empty. In order to
3002 avoid this subtle behavior CMake now prefers to disallow mixing the
3003 plain and keyword signatures of target_link_libraries() for a single
3004 target.
3005
3006 The OLD behavior for this policy is to allow keyword and plain tar‐
3007 get_link_libraries() signatures to be mixed. The NEW behavior for this
3008 policy is to not to allow mixing of the keyword and plain signatures.
3009
3010 This policy was introduced in CMake version 2.8.12. CMake version
3011 3.19.7 warns when the policy is not set and uses OLD behavior. Use the
3012 cmake_policy() command to set it to OLD or NEW explicitly.
3013
3014 NOTE:
3015 The OLD behavior of a policy is deprecated by definition and may be
3016 removed in a future version of CMake.
3017
3018 CMP0022
3019 INTERFACE_LINK_LIBRARIES defines the link interface.
3020
3021 CMake 2.8.11 constructed the ‘link interface’ of a target from proper‐
3022 ties matching (IMPORTED_)?LINK_INTERFACE_LIBRARIES(_<CONFIG>)?. The
3023 modern way to specify config-sensitive content is to use generator
3024 expressions and the IMPORTED_ prefix makes uniform processing of the
3025 link interface with generator expressions impossible. The INTER‐
3026 FACE_LINK_LIBRARIES target property was introduced as a replacement in
3027 CMake 2.8.12. This new property is named consistently with the INTER‐
3028 FACE_COMPILE_DEFINITIONS, INTERFACE_INCLUDE_DIRECTORIES and INTER‐
3029 FACE_COMPILE_OPTIONS properties. For in-build targets, CMake will use
3030 the INTERFACE_LINK_LIBRARIES property as the source of the link inter‐
3031 face only if policy CMP0022 is NEW. When exporting a target which has
3032 this policy set to NEW, only the INTERFACE_LINK_LIBRARIES property will
3033 be processed and generated for the IMPORTED target by default. A new
3034 option to the install(EXPORT) and export commands allows export of the
3035 old-style properties for compatibility with downstream users of CMake
3036 versions older than 2.8.12. The target_link_libraries() command will
3037 no longer populate the properties matching LINK_INTER‐
3038 FACE_LIBRARIES(_<CONFIG>)? if this policy is NEW.
3039
3040 Warning-free future-compatible code which works with CMake 2.8.7
3041 onwards can be written by using the LINK_PRIVATE and LINK_PUBLIC key‐
3042 words of target_link_libraries().
3043
3044 The OLD behavior for this policy is to ignore the INTER‐
3045 FACE_LINK_LIBRARIES property for in-build targets. The NEW behavior
3046 for this policy is to use the INTERFACE_LINK_LIBRARIES property for
3047 in-build targets, and ignore the old properties matching
3048 (IMPORTED_)?LINK_INTERFACE_LIBRARIES(_<CONFIG>)?.
3049
3050 This policy was introduced in CMake version 2.8.12. CMake version
3051 3.19.7 warns when the policy is not set and uses OLD behavior. Use the
3052 cmake_policy() command to set it to OLD or NEW explicitly.
3053
3054 NOTE:
3055 The OLD behavior of a policy is deprecated by definition and may be
3056 removed in a future version of CMake.
3057
3058 CMP0021
3059 Fatal error on relative paths in INCLUDE_DIRECTORIES target property.
3060
3061 CMake 2.8.10.2 and lower allowed the INCLUDE_DIRECTORIES target prop‐
3062 erty to contain relative paths. The base path for such relative
3063 entries is not well defined. CMake 2.8.12 issues a FATAL_ERROR if the
3064 INCLUDE_DIRECTORIES property contains a relative path.
3065
3066 The OLD behavior for this policy is not to warn about relative paths in
3067 the INCLUDE_DIRECTORIES target property. The NEW behavior for this
3068 policy is to issue a FATAL_ERROR if INCLUDE_DIRECTORIES contains a rel‐
3069 ative path.
3070
3071 This policy was introduced in CMake version 2.8.12. CMake version
3072 3.19.7 warns when the policy is not set and uses OLD behavior. Use the
3073 cmake_policy() command to set it to OLD or NEW explicitly.
3074
3075 NOTE:
3076 The OLD behavior of a policy is deprecated by definition and may be
3077 removed in a future version of CMake.
3078
3079 CMP0020
3080 Automatically link Qt executables to qtmain target on Windows.
3081
3082 CMake 2.8.10 and lower required users of Qt to always specify a link
3083 dependency to the qtmain.lib static library manually on Windows. CMake
3084 2.8.11 gained the ability to evaluate generator expressions while
3085 determining the link dependencies from IMPORTED targets. This allows
3086 CMake itself to automatically link executables which link to Qt to the
3087 qtmain.lib library when using IMPORTED Qt targets. For applications
3088 already linking to qtmain.lib, this should have little impact. For
3089 applications which supply their own alternative WinMain implementation
3090 and for applications which use the QAxServer library, this automatic
3091 linking will need to be disabled as per the documentation.
3092
3093 The OLD behavior for this policy is not to link executables to
3094 qtmain.lib automatically when they link to the QtCore IMPORTED target.
3095 The NEW behavior for this policy is to link executables to qtmain.lib
3096 automatically when they link to QtCore IMPORTED target.
3097
3098 This policy was introduced in CMake version 2.8.11. CMake version
3099 3.19.7 warns when the policy is not set and uses OLD behavior. Use the
3100 cmake_policy() command to set it to OLD or NEW explicitly.
3101
3102 NOTE:
3103 The OLD behavior of a policy is deprecated by definition and may be
3104 removed in a future version of CMake.
3105
3106 CMP0019
3107 Do not re-expand variables in include and link information.
3108
3109 CMake 2.8.10 and lower re-evaluated values given to the include_direc‐
3110 tories, link_directories, and link_libraries commands to expand any
3111 leftover variable references at the end of the configuration step.
3112 This was for strict compatibility with VERY early CMake versions
3113 because all variable references are now normally evaluated during CMake
3114 language processing. CMake 2.8.11 and higher prefer to skip the extra
3115 evaluation.
3116
3117 The OLD behavior for this policy is to re-evaluate the values for
3118 strict compatibility. The NEW behavior for this policy is to leave the
3119 values untouched.
3120
3121 This policy was introduced in CMake version 2.8.11. CMake version
3122 3.19.7 warns when the policy is not set and uses OLD behavior. Use the
3123 cmake_policy() command to set it to OLD or NEW explicitly.
3124
3125 NOTE:
3126 The OLD behavior of a policy is deprecated by definition and may be
3127 removed in a future version of CMake.
3128
3129 CMP0018
3130 Ignore CMAKE_SHARED_LIBRARY_<Lang>_FLAGS variable.
3131
3132 CMake 2.8.8 and lower compiled sources in SHARED and MODULE libraries
3133 using the value of the undocumented CMAKE_SHARED_LIBRARY_<Lang>_FLAGS
3134 platform variable. The variable contained platform-specific flags
3135 needed to compile objects for shared libraries. Typically it included
3136 a flag such as -fPIC for position independent code but also included
3137 other flags needed on certain platforms. CMake 2.8.9 and higher prefer
3138 instead to use the POSITION_INDEPENDENT_CODE target property to deter‐
3139 mine what targets should be position independent, and new undocumented
3140 platform variables to select flags while ignoring
3141 CMAKE_SHARED_LIBRARY_<Lang>_FLAGS completely.
3142
3143 The default for either approach produces identical compilation flags,
3144 but if a project modifies CMAKE_SHARED_LIBRARY_<Lang>_FLAGS from its
3145 original value this policy determines which approach to use.
3146
3147 The OLD behavior for this policy is to ignore the POSITION_INDEPEN‐
3148 DENT_CODE property for all targets and use the modified value of
3149 CMAKE_SHARED_LIBRARY_<Lang>_FLAGS for SHARED and MODULE libraries.
3150
3151 The NEW behavior for this policy is to ignore
3152 CMAKE_SHARED_LIBRARY_<Lang>_FLAGS whether it is modified or not and
3153 honor the POSITION_INDEPENDENT_CODE target property.
3154
3155 This policy was introduced in CMake version 2.8.9. CMake version
3156 3.19.7 warns when the policy is not set and uses OLD behavior. Use the
3157 cmake_policy() command to set it to OLD or NEW explicitly.
3158
3159 NOTE:
3160 The OLD behavior of a policy is deprecated by definition and may be
3161 removed in a future version of CMake.
3162
3163 CMP0017
3164 Prefer files from the CMake module directory when including from there.
3165
3166 Starting with CMake 2.8.4, if a cmake-module shipped with CMake (i.e.
3167 located in the CMake module directory) calls include() or find_pack‐
3168 age(), the files located in the CMake module directory are preferred
3169 over the files in CMAKE_MODULE_PATH. This makes sure that the modules
3170 belonging to CMake always get those files included which they expect,
3171 and against which they were developed and tested. In all other cases,
3172 the files found in CMAKE_MODULE_PATH still take precedence over the
3173 ones in the CMake module directory. The OLD behavior is to always pre‐
3174 fer files from CMAKE_MODULE_PATH over files from the CMake modules
3175 directory.
3176
3177 This policy was introduced in CMake version 2.8.4. CMake version
3178 3.19.7 warns when the policy is not set and uses OLD behavior. Use the
3179 cmake_policy() command to set it to OLD or NEW explicitly.
3180
3181 NOTE:
3182 The OLD behavior of a policy is deprecated by definition and may be
3183 removed in a future version of CMake.
3184
3185 CMP0016
3186 target_link_libraries() reports error if its only argument is not a
3187 target.
3188
3189 In CMake 2.8.2 and lower the target_link_libraries() command silently
3190 ignored if it was called with only one argument, and this argument
3191 wasn’t a valid target. In CMake 2.8.3 and above it reports an error in
3192 this case.
3193
3194 This policy was introduced in CMake version 2.8.3. CMake version
3195 3.19.7 warns when the policy is not set and uses OLD behavior. Use the
3196 cmake_policy() command to set it to OLD or NEW explicitly.
3197
3198 NOTE:
3199 The OLD behavior of a policy is deprecated by definition and may be
3200 removed in a future version of CMake.
3201
3202 CMP0015
3203 link_directories() treats paths relative to the source dir.
3204
3205 In CMake 2.8.0 and lower the link_directories() command passed relative
3206 paths unchanged to the linker. In CMake 2.8.1 and above the
3207 link_directories() command prefers to interpret relative paths with
3208 respect to CMAKE_CURRENT_SOURCE_DIR, which is consistent with
3209 include_directories() and other commands. The OLD behavior for this
3210 policy is to use relative paths verbatim in the linker command. The
3211 NEW behavior for this policy is to convert relative paths to absolute
3212 paths by appending the relative path to CMAKE_CURRENT_SOURCE_DIR.
3213
3214 This policy was introduced in CMake version 2.8.1. CMake version
3215 3.19.7 warns when the policy is not set and uses OLD behavior. Use the
3216 cmake_policy() command to set it to OLD or NEW explicitly.
3217
3218 NOTE:
3219 The OLD behavior of a policy is deprecated by definition and may be
3220 removed in a future version of CMake.
3221
3222 CMP0014
3223 Input directories must have CMakeLists.txt.
3224
3225 CMake versions before 2.8 silently ignored missing CMakeLists.txt files
3226 in directories referenced by add_subdirectory() or subdirs(), treating
3227 them as if present but empty. In CMake 2.8.0 and above this cmake_pol‐
3228 icy() determines whether or not the case is an error. The OLD behavior
3229 for this policy is to silently ignore the problem. The NEW behavior
3230 for this policy is to report an error.
3231
3232 This policy was introduced in CMake version 2.8.0. CMake version
3233 3.19.7 warns when the policy is not set and uses OLD behavior. Use the
3234 cmake_policy() command to set it to OLD or NEW explicitly.
3235
3236 NOTE:
3237 The OLD behavior of a policy is deprecated by definition and may be
3238 removed in a future version of CMake.
3239
3240 CMP0013
3241 Duplicate binary directories are not allowed.
3242
3243 CMake 2.6.3 and below silently permitted add_subdirectory() calls to
3244 create the same binary directory multiple times. During build system
3245 generation files would be written and then overwritten in the build
3246 tree and could lead to strange behavior. CMake 2.6.4 and above explic‐
3247 itly detect duplicate binary directories. CMake 2.6.4 always considers
3248 this case an error. In CMake 2.8.0 and above this policy determines
3249 whether or not the case is an error. The OLD behavior for this policy
3250 is to allow duplicate binary directories. The NEW behavior for this
3251 policy is to disallow duplicate binary directories with an error.
3252
3253 This policy was introduced in CMake version 2.8.0. CMake version
3254 3.19.7 warns when the policy is not set and uses OLD behavior. Use the
3255 cmake_policy() command to set it to OLD or NEW explicitly.
3256
3257 NOTE:
3258 The OLD behavior of a policy is deprecated by definition and may be
3259 removed in a future version of CMake.
3260
3261 CMP0012
3262 if() recognizes numbers and boolean constants.
3263
3264 In CMake versions 2.6.4 and lower the if() command implicitly derefer‐
3265 enced arguments corresponding to variables, even those named like num‐
3266 bers or boolean constants, except for 0 and 1. Numbers and boolean
3267 constants such as true, false, yes, no, on, off, y, n, notfound, ignore
3268 (all case insensitive) were recognized in some cases but not all. For
3269 example, the code if(TRUE) might have evaluated as false. Numbers such
3270 as 2 were recognized only in boolean expressions like if(NOT 2) (lead‐
3271 ing to false) but not as a single-argument like if(2) (also leading to
3272 false). Later versions of CMake prefer to treat numbers and boolean
3273 constants literally, so they should not be used as variable names.
3274
3275 The OLD behavior for this policy is to implicitly dereference variables
3276 named like numbers and boolean constants. The NEW behavior for this
3277 policy is to recognize numbers and boolean constants without derefer‐
3278 encing variables with such names.
3279
3280 This policy was introduced in CMake version 2.8.0. CMake version
3281 3.19.7 warns when the policy is not set and uses OLD behavior. Use the
3282 cmake_policy() command to set it to OLD or NEW explicitly.
3283
3284 NOTE:
3285 The OLD behavior of a policy is deprecated by definition and may be
3286 removed in a future version of CMake.
3287
3289 CMP0011
3290 Included scripts do automatic cmake_policy() PUSH and POP.
3291
3292 In CMake 2.6.2 and below, CMake Policy settings in scripts loaded by
3293 the include() and find_package() commands would affect the includer.
3294 Explicit invocations of cmake_policy(PUSH) and cmake_policy(POP) were
3295 required to isolate policy changes and protect the includer. While
3296 some scripts intend to affect the policies of their includer, most do
3297 not. In CMake 2.6.3 and above, include() and find_package() by default
3298 PUSH and POP an entry on the policy stack around an included script,
3299 but provide a NO_POLICY_SCOPE option to disable it. This policy deter‐
3300 mines whether or not to imply NO_POLICY_SCOPE for compatibility. The
3301 OLD behavior for this policy is to imply NO_POLICY_SCOPE for include()
3302 and find_package() commands. The NEW behavior for this policy is to
3303 allow the commands to do their default cmake_policy PUSH and POP.
3304
3305 This policy was introduced in CMake version 2.6.3. CMake version
3306 3.19.7 warns when the policy is not set and uses OLD behavior. Use the
3307 cmake_policy() command to set it to OLD or NEW explicitly.
3308
3309 NOTE:
3310 The OLD behavior of a policy is deprecated by definition and may be
3311 removed in a future version of CMake.
3312
3313 CMP0010
3314 Bad variable reference syntax is an error.
3315
3316 In CMake 2.6.2 and below, incorrect variable reference syntax such as a
3317 missing close-brace (${FOO) was reported but did not stop processing of
3318 CMake code. This policy determines whether a bad variable reference is
3319 an error. The OLD behavior for this policy is to warn about the error,
3320 leave the string untouched, and continue. The NEW behavior for this
3321 policy is to report an error.
3322
3323 If CMP0053 is set to NEW, this policy has no effect and is treated as
3324 always being NEW.
3325
3326 This policy was introduced in CMake version 2.6.3. CMake version
3327 3.19.7 warns when the policy is not set and uses OLD behavior. Use the
3328 cmake_policy() command to set it to OLD or NEW explicitly.
3329
3330 NOTE:
3331 The OLD behavior of a policy is deprecated by definition and may be
3332 removed in a future version of CMake.
3333
3334 CMP0009
3335 FILE GLOB_RECURSE calls should not follow symlinks by default.
3336
3337 In CMake 2.6.1 and below, file(GLOB_RECURSE) calls would follow through
3338 symlinks, sometimes coming up with unexpectedly large result sets
3339 because of symlinks to top level directories that contain hundreds of
3340 thousands of files.
3341
3342 This policy determines whether or not to follow symlinks encountered
3343 during a file(GLOB_RECURSE) call. The OLD behavior for this policy is
3344 to follow the symlinks. The NEW behavior for this policy is not to
3345 follow the symlinks by default, but only if FOLLOW_SYMLINKS is given as
3346 an additional argument to the FILE command.
3347
3348 This policy was introduced in CMake version 2.6.2. CMake version
3349 3.19.7 warns when the policy is not set and uses OLD behavior. Use the
3350 cmake_policy() command to set it to OLD or NEW explicitly.
3351
3352 NOTE:
3353 The OLD behavior of a policy is deprecated by definition and may be
3354 removed in a future version of CMake.
3355
3356 CMP0008
3357 Libraries linked by full-path must have a valid library file name.
3358
3359 In CMake 2.4 and below it is possible to write code like
3360
3361 target_link_libraries(myexe /full/path/to/somelib)
3362
3363 where somelib is supposed to be a valid library file name such as lib‐
3364 somelib.a or somelib.lib. For Makefile generators this produces an
3365 error at build time because the dependency on the full path cannot be
3366 found. For Visual Studio Generators IDE and Xcode generators this used
3367 to work by accident because CMake would always split off the library
3368 directory and ask the linker to search for the library by name
3369 (-lsomelib or somelib.lib). Despite the failure with Makefiles, some
3370 projects have code like this and build only with Visual Studio and/or
3371 Xcode. This version of CMake prefers to pass the full path directly to
3372 the native build tool, which will fail in this case because it does not
3373 name a valid library file.
3374
3375 This policy determines what to do with full paths that do not appear to
3376 name a valid library file. The OLD behavior for this policy is to
3377 split the library name from the path and ask the linker to search for
3378 it. The NEW behavior for this policy is to trust the given path and
3379 pass it directly to the native build tool unchanged.
3380
3381 This policy was introduced in CMake version 2.6.1. CMake version
3382 3.19.7 warns when the policy is not set and uses OLD behavior. Use the
3383 cmake_policy() command to set it to OLD or NEW explicitly.
3384
3385 NOTE:
3386 The OLD behavior of a policy is deprecated by definition and may be
3387 removed in a future version of CMake.
3388
3389 CMP0007
3390 list command no longer ignores empty elements.
3391
3392 This policy determines whether the list command will ignore empty ele‐
3393 ments in the list. CMake 2.4 and below list commands ignored all empty
3394 elements in the list. For example, a;b;;c would have length 3 and not
3395 4. The OLD behavior for this policy is to ignore empty list elements.
3396 The NEW behavior for this policy is to correctly count empty elements
3397 in a list.
3398
3399 This policy was introduced in CMake version 2.6.0. CMake version
3400 3.19.7 warns when the policy is not set and uses OLD behavior. Use the
3401 cmake_policy() command to set it to OLD or NEW explicitly.
3402
3403 NOTE:
3404 The OLD behavior of a policy is deprecated by definition and may be
3405 removed in a future version of CMake.
3406
3407 CMP0006
3408 Installing MACOSX_BUNDLE targets requires a BUNDLE DESTINATION.
3409
3410 This policy determines whether the install(TARGETS) command must be
3411 given a BUNDLE DESTINATION when asked to install a target with the
3412 MACOSX_BUNDLE property set. CMake 2.4 and below did not distinguish
3413 application bundles from normal executables when installing targets.
3414 CMake 2.6 provides a BUNDLE option to the install(TARGETS) command that
3415 specifies rules specific to application bundles on the Mac. Projects
3416 should use this option when installing a target with the MACOSX_BUNDLE
3417 property set.
3418
3419 The OLD behavior for this policy is to fall back to the RUNTIME DESTI‐
3420 NATION if a BUNDLE DESTINATION is not given. The NEW behavior for this
3421 policy is to produce an error if a bundle target is installed without a
3422 BUNDLE DESTINATION.
3423
3424 This policy was introduced in CMake version 2.6.0. CMake version
3425 3.19.7 warns when the policy is not set and uses OLD behavior. Use the
3426 cmake_policy() command to set it to OLD or NEW explicitly.
3427
3428 NOTE:
3429 The OLD behavior of a policy is deprecated by definition and may be
3430 removed in a future version of CMake.
3431
3432 CMP0005
3433 Preprocessor definition values are now escaped automatically.
3434
3435 This policy determines whether or not CMake should generate escaped
3436 preprocessor definition values added via add_definitions. CMake ver‐
3437 sions 2.4 and below assumed that only trivial values would be given for
3438 macros in add_definitions calls. It did not attempt to escape
3439 non-trivial values such as string literals in generated build rules.
3440 CMake versions 2.6 and above support escaping of most values, but can‐
3441 not assume the user has not added escapes already in an attempt to work
3442 around limitations in earlier versions.
3443
3444 The OLD behavior for this policy is to place definition values given to
3445 add_definitions directly in the generated build rules without attempt‐
3446 ing to escape anything. The NEW behavior for this policy is to gener‐
3447 ate correct escapes for all native build tools automatically. See doc‐
3448 umentation of the COMPILE_DEFINITIONS target property for limitations
3449 of the escaping implementation.
3450
3451 This policy was introduced in CMake version 2.6.0. CMake version
3452 3.19.7 warns when the policy is not set and uses OLD behavior. Use the
3453 cmake_policy() command to set it to OLD or NEW explicitly.
3454
3455 NOTE:
3456 The OLD behavior of a policy is deprecated by definition and may be
3457 removed in a future version of CMake.
3458
3459 CMP0004
3460 Libraries linked may not have leading or trailing whitespace.
3461
3462 CMake versions 2.4 and below silently removed leading and trailing
3463 whitespace from libraries linked with code like
3464
3465 target_link_libraries(myexe " A ")
3466
3467 This could lead to subtle errors in user projects.
3468
3469 The OLD behavior for this policy is to silently remove leading and
3470 trailing whitespace. The NEW behavior for this policy is to diagnose
3471 the existence of such whitespace as an error. The setting for this
3472 policy used when checking the library names is that in effect when the
3473 target is created by an add_executable() or add_library() command.
3474
3475 This policy was introduced in CMake version 2.6.0. CMake version
3476 3.19.7 warns when the policy is not set and uses OLD behavior. Use the
3477 cmake_policy() command to set it to OLD or NEW explicitly.
3478
3479 NOTE:
3480 The OLD behavior of a policy is deprecated by definition and may be
3481 removed in a future version of CMake.
3482
3483 CMP0003
3484 Libraries linked via full path no longer produce linker search paths.
3485
3486 This policy affects how libraries whose full paths are NOT known are
3487 found at link time, but was created due to a change in how CMake deals
3488 with libraries whose full paths are known. Consider the code
3489
3490 target_link_libraries(myexe /path/to/libA.so)
3491
3492 CMake 2.4 and below implemented linking to libraries whose full paths
3493 are known by splitting them on the link line into separate components
3494 consisting of the linker search path and the library name. The example
3495 code might have produced something like
3496
3497 ... -L/path/to -lA ...
3498
3499 in order to link to library A. An analysis was performed to order mul‐
3500 tiple link directories such that the linker would find library A in the
3501 desired location, but there are cases in which this does not work.
3502 CMake versions 2.6 and above use the more reliable approach of passing
3503 the full path to libraries directly to the linker in most cases. The
3504 example code now produces something like
3505
3506 ... /path/to/libA.so ....
3507
3508 Unfortunately this change can break code like
3509
3510 target_link_libraries(myexe /path/to/libA.so B)
3511
3512 where B is meant to find /path/to/libB.so. This code is wrong because
3513 the user is asking the linker to find library B but has not provided a
3514 linker search path (which may be added with the link_directories com‐
3515 mand). However, with the old linking implementation the code would
3516 work accidentally because the linker search path added for library A
3517 allowed library B to be found.
3518
3519 In order to support projects depending on linker search paths added by
3520 linking to libraries with known full paths, the OLD behavior for this
3521 policy will add the linker search paths even though they are not needed
3522 for their own libraries. When this policy is set to OLD, CMake will
3523 produce a link line such as
3524
3525 ... -L/path/to /path/to/libA.so -lB ...
3526
3527 which will allow library B to be found as it was previously. When this
3528 policy is set to NEW, CMake will produce a link line such as
3529
3530 ... /path/to/libA.so -lB ...
3531
3532 which more accurately matches what the project specified.
3533
3534 The setting for this policy used when generating the link line is that
3535 in effect when the target is created by an add_executable or
3536 add_library command. For the example described above, the code
3537
3538 cmake_policy(SET CMP0003 OLD) # or cmake_policy(VERSION 2.4)
3539 add_executable(myexe myexe.c)
3540 target_link_libraries(myexe /path/to/libA.so B)
3541
3542 will work and suppress the warning for this policy. It may also be
3543 updated to work with the corrected linking approach:
3544
3545 cmake_policy(SET CMP0003 NEW) # or cmake_policy(VERSION 2.6)
3546 link_directories(/path/to) # needed to find library B
3547 add_executable(myexe myexe.c)
3548 target_link_libraries(myexe /path/to/libA.so B)
3549
3550 Even better, library B may be specified with a full path:
3551
3552 add_executable(myexe myexe.c)
3553 target_link_libraries(myexe /path/to/libA.so /path/to/libB.so)
3554
3555 When all items on the link line have known paths CMake does not check
3556 this policy so it has no effect.
3557
3558 Note that the warning for this policy will be issued for at most one
3559 target. This avoids flooding users with messages for every target when
3560 setting the policy once will probably fix all targets.
3561
3562 This policy was introduced in CMake version 2.6.0. CMake version
3563 3.19.7 warns when the policy is not set and uses OLD behavior. Use the
3564 cmake_policy() command to set it to OLD or NEW explicitly.
3565
3566 NOTE:
3567 The OLD behavior of a policy is deprecated by definition and may be
3568 removed in a future version of CMake.
3569
3570 CMP0002
3571 Logical target names must be globally unique.
3572
3573 Targets names created with add_executable(), add_library(), or add_cus‐
3574 tom_target() are logical build target names. Logical target names must
3575 be globally unique because:
3576
3577 - Unique names may be referenced unambiguously both in CMake
3578 code and on make tool command lines.
3579 - Logical names are used by Xcode and VS IDE generators
3580 to produce meaningful project names for the targets.
3581
3582 The logical name of executable and library targets does not have to
3583 correspond to the physical file names built. Consider using the OUT‐
3584 PUT_NAME target property to create two targets with the same physical
3585 name while keeping logical names distinct. Custom targets must simply
3586 have globally unique names (unless one uses the global property
3587 ALLOW_DUPLICATE_CUSTOM_TARGETS with a Makefiles generator).
3588
3589 This policy was introduced in CMake version 2.6.0. CMake version
3590 3.19.7 warns when the policy is not set and uses OLD behavior. Use the
3591 cmake_policy() command to set it to OLD or NEW explicitly.
3592
3593 NOTE:
3594 The OLD behavior of a policy is deprecated by definition and may be
3595 removed in a future version of CMake.
3596
3597 CMP0001
3598 CMAKE_BACKWARDS_COMPATIBILITY should no longer be used.
3599
3600 The behavior is to check CMAKE_BACKWARDS_COMPATIBILITY and present it
3601 to the user. The NEW behavior is to ignore CMAKE_BACKWARDS_COMPATIBIL‐
3602 ITY completely.
3603
3604 In CMake 2.4 and below the variable CMAKE_BACKWARDS_COMPATIBILITY was
3605 used to request compatibility with earlier versions of CMake. In CMake
3606 2.6 and above all compatibility issues are handled by policies and the
3607 cmake_policy() command. However, CMake must still check CMAKE_BACK‐
3608 WARDS_COMPATIBILITY for projects written for CMake 2.4 and below.
3609
3610 This policy was introduced in CMake version 2.6.0. CMake version
3611 3.19.7 warns when the policy is not set and uses OLD behavior. Use the
3612 cmake_policy() command to set it to OLD or NEW explicitly.
3613
3614 NOTE:
3615 The OLD behavior of a policy is deprecated by definition and may be
3616 removed in a future version of CMake.
3617
3618 CMP0000
3619 A minimum required CMake version must be specified.
3620
3621 CMake requires that projects specify the version of CMake to which they
3622 have been written. This policy has been put in place so users trying
3623 to build the project may be told when they need to update their CMake.
3624 Specifying a version also helps the project build with CMake versions
3625 newer than that specified. Use the cmake_minimum_required() command at
3626 the top of your main CMakeLists.txt file:
3627
3628 cmake_minimum_required(VERSION <major>.<minor>)
3629
3630 where <major>.<minor> is the version of CMake you want to support (such
3631 as 3.14). The command will ensure that at least the given version of
3632 CMake is running and help newer versions be compatible with the
3633 project. See documentation of cmake_minimum_required() for details.
3634
3635 Note that the command invocation must appear in the CMakeLists.txt file
3636 itself; a call in an included file is not sufficient. However, the
3637 cmake_policy() command may be called to set policy CMP0000 to OLD or
3638 NEW behavior explicitly. The OLD behavior is to silently ignore the
3639 missing invocation. The NEW behavior is to issue an error instead of a
3640 warning. An included file may set CMP0000 explicitly to affect how
3641 this policy is enforced for the main CMakeLists.txt file.
3642
3643 This policy was introduced in CMake version 2.6.0.
3644
3645 NOTE:
3646 The OLD behavior of a policy is deprecated by definition and may be
3647 removed in a future version of CMake.
3648
3650 2000-2021 Kitware, Inc. and Contributors
3651
3652
3653
3654
36553.19.7 Mar 15, 2021 CMAKE-POLICIES(7)