cmake, perdu dans le concept de variables globales (et alternatives PARENT_SCOPE ou add_subdirectory)

J'ai un cmake projet dans lequel j'ai quelques modules et je suis aide à Trouver-*.cmake pour y compris l'partagé modules de l'application.
Pour ne pas prendre en compte tous les modules que j'ai ajouté, j'ai défini un genre de LIB variables tor l'éditeur de liens:

# inside a Find-*.cmake or in the CMakeLists.txt of the modules:
set(LIB ${LIB} ...)

donc dans l'une des finales des applications qui utilise des modules que je peux le faire:

target_link_libraries(${APP_NAME} ${LIB})

Alors, j'aimerais avoir les modules compilés dans le /project_path/modules/foo/build de sorte que si un module est vraiment gros pour compiler, il peut être établi une fois pour toutes les applications qui l'utilisent. La façon dont je suis atteinte de cette est de charger le CMakeLists.txt du module à partir de la Trouver-*.cmake de cette façon:

# Inside FindFoo.cmake, for loading /project_path/modules/foo/CMakeLists.txt
# and compile it in /project_path/modules/foo/build
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/../modules/${PACKAGE_NAME} 
                 ${CMAKE_CURRENT_LIST_DIR}/../modules/${PACKAGE_NAME}/build
)
include_directories(${CMAKE_CURRENT_LIST_DIR}/../modules/${PACKAGE_NAME}/include)

Mais il arrivait parfois que certains module d'exiger d'un autre modules, de sorte que le add_subdirectory crée de nouvelles étendues et peuvent charger correctement LIB mais ne peut pas l'écrire (quand j'utilise set c'est dans le plus profond de la portée et de ne pas les modifications de la partie supérieure de la portée). Pour contourner cela, je dois ajouter PARENT_SCOPE dans le set).. j'ai Donc essayé de l'ajouter dans certains module qui je pense pourrait être imbriquées et cachés dans des dépendances, mais la compilation de toutes les application que j'ai tout à coup:

CMake Warning (dev) at /path_to_repo/cmake/FindFooX.cmake:6 (set):
  Cannot set "LIB": current scope has no parent.
Call Stack (most recent call first):
  CMakeLists.txt:14 (find_package)
This warning is for project developers.  Use -Wno-dev to suppress it.

Je crains que cela peut changer d'une application à une autre à l'égard de laquelle le module j'ai besoin ou dans le respect de l'arbre avec des dépendances dans les modules de lui-même donc je suis à la recherche d'une solution plus propre.

source d'informationauteur nkint