Почему не работает find_library() внутри foreach()?

Код:

foreach (item avformat avcodec avfilter)

    message("${item}")
    
    find_library(ff_lib
        NAMES
            ${item}
        PATH_SUFFIXES
            ffmpeg-4.3-win64-dev/lib/
        REQUIRED
    )

    message("${ff_lib}")
    
    set(FFmpeg ${FFmpeg} ${ff_lib})
    
    unset(ff_lib)
    
endforeach ()

message("${FFmpeg}")

Вывод:

avformat
C:/Users/me/Desktop/ffmpeg-4.3-win64-dev/lib/avformat.lib
avcodec
C:/Users/me/Desktop/ffmpeg-4.3-win64-dev/lib/avformat.lib
avfilter
C:/Users/me/Desktop/ffmpeg-4.3-win64-dev/lib/avformat.lib
C:/Users/me/Desktop/ffmpeg-4.3-win64-dev/lib/avformat.lib;C:/Users/me/Desktop/ffmpeg-4.3-win64-dev/lib/avformat.lib;C:/Users/me/Desktop/ffmpeg-4.3-win64-dev/lib/avformat.lib
-- Configuring done
-- Generating done

PS: т.е. переменная ff_lib не перезаписывается даже после unset(ff_lib).


Ответы (1 шт):

Автор решения: Παν μέτρον άριστον

Нашёл костыль в англоязычном StackOverflow. Оказывается find_library() устанавливает кэшированную переменную, которую нельзя удалить. Вот так работает:

foreach (item avformat avcodec avfilter)

    set(ff_lib ff_lib-NOTFOUND)

    find_library(ff_lib
        NAMES
            ${item}
        PATH_SUFFIXES
            ffmpeg-4.3-win64-dev/lib/
        REQUIRED
    )

    set(FFmpeg ${FFmpeg} ${ff_lib})

endforeach ()
→ Ссылка