Из вики:
CMAKE_CURRENT_SOURCE_DIR - это каталог, в котором находится обрабатываемый файл CMakeLists.txt.
CMAKE_CURRENT_LIST_DIR (начиная с 2.8.3) это каталог обрабатываемого в данный момент файла списка.
Из Документов:
CMAKE_CURRENT_SOURCE_DIR: путь к исходному каталогу, который в настоящее время обрабатывается. Это полный путь к исходному каталогу, который в настоящее время обрабатывается cmake.
CMAKE_CURRENT_LIST_DIR: Полный каталог обрабатываемого в данный момент файла списка. Поскольку CMake обрабатывает файлы списка в вашем проекте, эта переменная всегда будет установлена в каталог, в котором находится файл списка, который в настоящее время обрабатывается (CMAKE_CURRENT_LIST_FILE). Значение имеет динамическую область видимости. Когда CMake начинает обработку команд в исходном файле, он устанавливает эту переменную в каталог, в котором расположен этот файл. Когда CMake завершает обработку команд из файла, он восстанавливает предыдущее значение. Следовательно, значение переменной внутри макроса или функции - это каталог файла, вызывающего самую нижнюю запись в стеке вызовов, а не каталог файла, содержащего определение макроса или функции.
При каких обстоятельствах эти переменные будут иметь разные значения?
./
?