Допустим имеется программа, зависящая от liba, libb, libd. Какой является рекомендованный и самый простой способ слинковаться с liba и libb динамически, а с libd статически?
Все библиотеки установлены в системе пакетным менеджером, информация о флагах получается из pkg-config, порядок линковки может быть любой. Из pkg-config даже если передаем --static мы чаще всего получаем флаг линковки вида -ld, ничем не отличающийся от динамической линковки. Оный необходимо либо обернуть будет в -Wl,-bstatic -Wl,bdynamic.
Тогда вопрос вырождается в то, что совершенно непонятно, как заставить CMake передать компилятору такое заклинание и не наплодить говногода в CMakeLists.txt (В идеале не отказываясь от target_link_libraries)
Или лучше линковаться с libd.a просто добавляя этот файл к add_executable(blah main.c /path/to/libd.a). Но тогда не понятно, как от pkg-config получить путь и имя .a файла и какие предположения можно делать, чтобы было максимально переносимо между дистрибутивами.