Diferencia entre CMAKE_CURRENT_SOURCE_DIR y CMAKE_CURRENT_LIST_DIR

De la Wiki:

CMAKE_CURRENT_SOURCE_DIR
este es el directorio en el que actualmente procesado CMakeLists.txt se encuentra en

CMAKE_CURRENT_LIST_DIR
(desde 2.8.3) este es el directorio de la listfile actualmente en tramitación.

De la documentación:

CMAKE_CURRENT_SOURCE_DIR: La ruta de acceso al directorio de origen que se está procesando.
Esta la ruta de acceso completa del directorio de origen que actualmente está siendo procesado por cmake.

CMAKE_CURRENT_LIST_DIR: directorio Completo de la listfile actualmente en tramitación.
Como CMake los procesos de la listfiles en su proyecto de esta variable es siempre el directorio donde el listfile que actualmente se encuentra en trámite (CMAKE_CURRENT_LIST_FILE) se encuentra. El valor dinámico de alcance. Cuando CMake comienza el procesamiento de los comandos en un archivo de código fuente se establece esta variable en el directorio donde esta el archivo se encuentra. Cuando CMake termina de procesar comandos desde el archivo se restaura el valor anterior. Por lo tanto, el valor de la variable dentro de un macro o función es el directorio de archivo de la invocación de la parte más inferior de la entrada en la pila de llamadas, no el directorio del archivo que contiene la macro o definición de la función.

Bajo qué circunstancias estas variables tienen valores diferentes?

  • Y también cómo se diferencian a partir de simple y agradable ./?

1 Kommentar

  1. 105

    Las variables CMAKE_CURRENT_SOURCE_DIR y CMAKE_CURRENT_LIST_DIR puede referirse a diferentes directorios para un CMake archivo de lista que se incluye otro archivo con el incluyen comando. E. g., si un CMakeLists.txt está presente en un directorio project y contiene la siguiente directiva

    include(src/CMakeLists.txt)
    

    entonces, mientras src/CMakeLists.txt está siendo procesado CMAKE_CURRENT_LIST_DIR se refieren a project/src mientras que CMAKE_CURRENT_SOURCE_DIR todavía puntos para el exterior de directorio project.

    CMAKE_CURRENT_LIST_DIR viene en práctico cuando usted necesita para localizar los archivos de recursos, como archivos de plantilla de lote o secuencias de comandos que se encuentra junto a la CMakeLists.txt archivo que se está procesando.

    • +1. Sólo quiero agregar que CMAKE_CURRENT_LIST_DIR cambia con cada archivo que include(); no tiene que ser llamado CMakeLists.txt.
    • Buena discusión aquí sobre cómo utilizar eficazmente CMAKE_CURRENT_LIST_DIR y include(...) en sus proyectos.
    • Fácilmente confundido porque CMAKE_CURRENT_SOURCE_DIR es más similar a CMAKE_SOURCE_DIR de los documentos implica.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea