Do Wiki:
CMAKE_CURRENT_SOURCE_DIR este é o diretório onde o CMakeLists.txt processado atualmente está localizado
CMAKE_CURRENT_LIST_DIR (desde 2.8.3) este é o diretório do listfile sendo processado atualmente.
Do Docs:
CMAKE_CURRENT_SOURCE_DIR: O caminho para o diretório de origem que está sendo processado. Este é o caminho completo para o diretório de origem que está sendo processado pelo cmake.
CMAKE_CURRENT_LIST_DIR: Diretório completo do listfile atualmente em processamento. Conforme o CMake processa os arquivos de lista em seu projeto, esta variável sempre será definida para o diretório onde o arquivo de lista que está sendo processado atualmente (CMAKE_CURRENT_LIST_FILE) está localizado. O valor tem escopo dinâmico. Quando CMake começa a processar comandos em um arquivo fonte, ele define esta variável para o diretório onde este arquivo está localizado. Quando CMake termina de processar comandos do arquivo, ele restaura o valor anterior. Portanto, o valor da variável dentro de uma macro ou função é o diretório do arquivo que invoca a entrada mais inferior na pilha de chamadas, não o diretório do arquivo que contém a macro ou definição de função.
Sob quais circunstâncias essas variáveis teriam valores diferentes?
./
?Respostas:
As variáveis
CMAKE_CURRENT_SOURCE_DIR
eCMAKE_CURRENT_LIST_DIR
podem referir-se a diferentes diretórios para um arquivo de lista CMake que é incluído por outro arquivo com o comando include . Por exemplo, se umCMakeLists.txt
está presente em um diretórioproject
e contém a seguinte diretivaentão, while
src/CMakeLists.txt
está sendo processadoCMAKE_CURRENT_LIST_DIR
fará referência aproject/src
enquantoCMAKE_CURRENT_SOURCE_DIR
ainda aponta para o diretório externoproject
.CMAKE_CURRENT_LIST_DIR
é útil quando você precisa localizar arquivos de recursos, como arquivos de modelo ou scripts em lote, localizados próximos aoCMakeLists.txt
arquivo que está sendo processado.fonte
CMAKE_CURRENT_LIST_DIR
mudanças com cada arquivo que vocêinclude()
; não precisa ser chamadoCMakeLists.txt
.CMAKE_CURRENT_LIST_DIR
einclude(...)
em seus projetos com eficácia .CMAKE_CURRENT_SOURCE_DIR
é mais semelhante a doCMAKE_SOURCE_DIR
que os documentos sugerem.add_subdirectory()
? Ambas as variáveis apontarão para a pasta?