Jeu de Variables avec PARENT_SCOPE sont vides dans l'enfant. Pourquoi?

Envisager minimales suivantes par exemple:

.
├── bar
│   └── CMakeLists.txt
└── CMakeLists.txt

./CMakeLists.txt est

project( foo )
cmake_minimum_required( VERSION 2.8 )

set( FOO "Exists in both, parent AND in child scope." )

add_subdirectory( bar )
message( STATUS "Variable BAR in ./    = ${BAR}" )
message( STATUS "Variable FOO in ./    = ${FOO}" )

et ./bar/CMakeLists.txt est

set( BAR "Exists in parent scope only." PARENT_SCOPE )
message( STATUS "Variable BAR in ./bar/= ${BAR}" )

La partie pertinente de la sortie de cmake est-ce:

...
-- Variable BAR in ./bar/=
-- Variable FOO in ./bar/= Exists in both, parent AND in child scope.
-- Variable BAR in ./    = Exists in parent scope only.
-- Variable FOO in ./    = Exists in both, parent AND in child scope.
...

Puisque la variable BAR est placé dans la portée parent je m'attends à ce qu'elle soit disponible dans le courant de l'enfant de la portée de l' (et dans ceux qui suivent), tout comme la variable FOO, qui est définie de la portée parent pour commencer. Mais comme on peut le voir dans les lignes ci-dessus le
variable BAR est vide dans ./bar/CMakeLists.txt, qui me conduisent à
les questions suivantes:

Pourquoi le modifié parent pas immédiatement accessible à l'enfant
portée, ./bar/? Cela peut-il être atténués? Si oui, comment? Et si non, qu'est ce qu'un
travail autour? Ou suis-je complètement à côté de quelque chose d'évident?

Contexte: mon projet est constitué de plusieurs fichiers exécutables et les bibliothèques. Pour un
bibliothèque, par exemple bar, j'aimerais définir une variable bar_INCLUDE_DIR qui
est ajouté à inclure les chemins de tout en fonction de l'exécutable, c'est à dire target_include_directories( my_target PUBLIC bar_INCLUDE_DIR ).

InformationsquelleAutor nils | 2015-04-27