Genelde wrapper oluyor. Çoğu C++ da kullanabilmek için.
C++ ana dilin oluyor. Diğer diller ise senin yardımcıların gibi düşün.
C kullanıyor çünkü C ile geliştirilen bir lib vardır. Ya da kendisi lib yazmıştır onu entegre etmiştir. C++, C kodunu çağırabiliyor. Çoğu C++ projede C kodlarınında olduğunu görürsün. Tekerleği yeniden icat etmeye gerek yok. Zamanında yazmışlar al kullan. C de yazılıyor ki hem C hem de C++ da kullanılabilsin diye.
Aynı şekilde glsl ve Lua da C++ içinde kullabilirsin. Lua zaten yorumlanan bir dil. Python gibi, C++ içerisinden çağrım yapabiliyorsun. C++ ile fonksiyon oluşturup bunu Python'ya da Lua'ya da JavaScript içinde çağırıyorsun. Native function olarak geçer genelde.
Cmake zaten proje derleyicisi. O ayrı bir olay.
Java genelde çağrılmaz, Java içerisinden C++ çağrılıyor (Android native vs). Ama tersi mümkün değil. Tabii yıl kaç oldu wrapper yazmışlardır kim bilir. Ama büyük ihtimalle basit bir tool için yazılmıştır. Ana projeye dahil değil, yardımcı tool geliştirmişlerdir Java'da. Ya da birkaç Config dosyasını Java olarak görüyor da olabilir bilmiyorum. Ama Java, C++ projesinde genelde yer almaz. Ayrı bir projedir o. Mesela şöyle, C++ => Client, Java => server gibi.