Из Wiki:
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 завершает обработку команд из файла, он восстанавливает предыдущее значение. Поэтому значение переменной внутри макроса или функции является каталогом файла, вызывающего самую нижнюю запись в стеке вызовов, а не в каталоге файла, содержащего определение макроса или функции.
При каких обстоятельствах эти переменные будут иметь разные значения?