Cette page contient un bon résumé des variables que CMake définit déjà pour nous. Je pense que certaines variables sont les mêmes. Prenons l'exemple de CMAKE_SOURCE_DIR
et PROJECT_SOURCE_DIR
par exemple. Ils sont identiques, se référant au dossier où le CMakeLists.txt de niveau supérieur est défini. Donc ma question est: y a-t-il une différence subtile entre eux? Merci.
Il y a une différence entre ces variables. CMAKE_SOURCE_DIR
fait en effet référence au dossier où le CMakeLists.txt de niveau supérieur est défini. Cependant, PROJECT_SOURCE_DIR
fait référence au dossier du CMakeLists.txt contenant la commande project()
la plus récente.
Par exemple, supposons que vous ayez un projet de niveau supérieur appelé Outer
et qu'il contienne un sous-répertoire avec son propre projet appelé Inner
. CMakeLists.txt de Outer
a:
project(Outer)
add_subdirectory(Inner)
et Inner
:
project(Inner)
Ensuite, dans ces deux fichiers CMakeLists, CMAKE_SOURCE_DIR
Fera référence au répertoire source de Outer
. Mais si PROJECT_SOURCE_DIR
Pour Outer
est aussi le même répertoire, ce n'est pas le cas pour Inner
. Inner
PROJECT_SOURCE_DIR
est le sous-répertoire contenant son CMakeLists.txt.
Cette différence s'applique à toutes les variables PROJECT_<var>
Et CMAKE_<var>
.
Après l'excellente réponse de Fraser.
CMAKE_CURRENT_SOURCE_DIR est the build directory being processed
.
Supposons que vous ayez un répertoire appelé Inner1
Contenant un fichier CMakeLists.txt sans appeler project
à l'intérieur. Ensuite, PROJECT_SOURCE_DIR
N'est pas défini avec le chemin de répertoire de Inner1
, Mais CMAKE_CURRENT_SOURCE_DIR
Est défini lors du traitement.
Vous pouvez également trouver CMAKE_CURRENT_LIST_DIR intéressant et la définition de listfile utile.