De la Wiki:
CMAKE_CURRENT_SOURCE_DIR este es el directorio donde se encuentra el CMakeLists.txt actualmente procesado
CMAKE_CURRENT_LIST_DIR (desde 2.8.3) este es el directorio del archivo de lista que se está procesando actualmente.
De los Documentos:
CMAKE_CURRENT_SOURCE_DIR: la ruta al directorio de origen que se está procesando actualmente. Esta es la ruta completa al directorio de origen que cmake está procesando actualmente.
CMAKE_CURRENT_LIST_DIR: directorio completo del archivo de lista que se está procesando actualmente. A medida que CMake procesa los archivos de lista en su proyecto, esta variable siempre se establecerá en el directorio donde se encuentra el archivo de lista que se está procesando actualmente (CMAKE_CURRENT_LIST_FILE). El valor tiene alcance dinámico. Cuando CMake comienza a procesar comandos en un archivo fuente, establece esta variable en el directorio donde se encuentra este archivo. Cuando CMake termina de procesar los comandos del archivo, restaura el valor anterior. Por lo tanto, el valor de la variable dentro de una macro o función es el directorio del archivo que invoca la entrada más baja en la pila de llamadas, no el directorio del archivo que contiene la macro o la definición de la función.
¿En qué circunstancias estas variables tendrían valores diferentes?
./
?Respuestas:
Las variables
CMAKE_CURRENT_SOURCE_DIR
yCMAKE_CURRENT_LIST_DIR
pueden hacer referencia a diferentes directorios para un archivo de lista de CMake que se incluye en otro archivo con el comando include . Por ejemplo, si aCMakeLists.txt
está presente en un directorioproject
y contiene la siguiente directivaluego, mientras
src/CMakeLists.txt
se está procesando,CMAKE_CURRENT_LIST_DIR
se referirá aproject/src
mientras queCMAKE_CURRENT_SOURCE_DIR
aún apunta al directorio externoproject
.CMAKE_CURRENT_LIST_DIR
resulta útil cuando necesita localizar archivos de recursos como archivos de plantilla o scripts por lotes que se encuentran junto alCMakeLists.txt
archivo que se está procesando actualmente.fuente
CMAKE_CURRENT_LIST_DIR
cambia con cada archivoinclude()
; no tiene que ser llamadoCMakeLists.txt
.CMAKE_CURRENT_LIST_DIR
yinclude(...)
en sus proyectos.CMAKE_CURRENT_SOURCE_DIR
es más similar a loCMAKE_SOURCE_DIR
que implican los documentos.add_subdirectory()
? ¿Apuntarán ambas variables a la carpeta?