web-dev-qa-db-fra.com

Différence entre CMAKE_CURRENT_SOURCE_DIR et CMAKE_CURRENT_LIST_DIR

Du Wiki:

CMAKE_CURRENT_SOURCE_DIR c'est le répertoire où se trouve le CMakeLists.txt actuellement traité dans

CMAKE_CURRENT_LIST_DIR (depuis 2.8.3) c'est le répertoire du fichier de liste en cours de traitement.

Depuis les documents:

CMAKE_CURRENT_SOURCE_DIR: Le chemin vers le répertoire source en cours de traitement. C'est le chemin complet vers le répertoire source qui est actuellement en cours de traitement par cmake.

CMAKE_CURRENT_LIST_DIR: Répertoire complet du fichier de liste en cours de traitement. Comme CMake traite les fichiers de liste dans votre projet, cette variable sera toujours définie dans le répertoire où se trouve le fichier de liste en cours de traitement (CMAKE_CURRENT_LIST_FILE). La valeur a une portée dynamique. Lorsque CMake commence à traiter des commandes dans un fichier source, il définit cette variable dans le répertoire où se trouve ce fichier. Lorsque CMake a fini de traiter les commandes du fichier, il restaure la valeur précédente. Par conséquent, la valeur de la variable à l'intérieur d'une macro ou d'une fonction est le répertoire du fichier appelant l'entrée la plus basse de la pile d'appels, pas le répertoire du fichier contenant la définition de macro ou de fonction.

Dans quelles circonstances ces variables auraient-elles des valeurs différentes?

76
William Payne

Les variables CMAKE_CURRENT_SOURCE_DIR et CMAKE_CURRENT_LIST_DIR peut faire référence à différents répertoires pour un fichier de liste CMake qui est inclus par un autre fichier avec la commande include . Par exemple, si un CMakeLists.txt est présent dans un répertoire project et contient la directive suivante

include(src/CMakeLists.txt)

puis tout en src/CMakeLists.txt est en cours de traitement CMAKE_CURRENT_LIST_DIR fera référence à project/src tandis que CMAKE_CURRENT_SOURCE_DIR pointe toujours vers le répertoire externe project.

CMAKE_CURRENT_LIST_DIR est pratique lorsque vous devez localiser des fichiers de ressources tels que des fichiers de modèle ou des scripts de commandes situés à côté de CMakeLists.txt fichier en cours de traitement.

90
sakra