CMake пытается использовать полный путь к библиотеке, а не разрешать компоновщику искать пути к библиотекам.Если вы используете ldd в полученных двоичных файлах, вы увидите, что они связаны с одним и тем же (динамически в обоих случаях).Для таких вещей, как VTK, лучше всего использовать CMake, поскольку он также отслеживает такие вещи, как библиотеки интерфейсов.
Я думаю, что вы неправильно поняли некоторые аргументы компоновщика, -lvtkIO будет ссылаться на библиотекуПуть к библиотеке с именем libvtkIO.so, -ldl будет ссылаться на библиотеку с именем libdl.so.Аргумент -L используется для добавления дополнительных путей, которые компоновщик должен искать для библиотек.