Почему не работает 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 ()