Csak hogy tisztázzuk: a FreeBSD az alaprendszer részeként hoz egy make parancsot, amellyel pl. a ports-fa is kezelhető ill. az alaprendszer fordítható (azaz a fordításának menete szabályozható).
Pont ugyanúgy hoz egy cp, ls, stb. parancsot, amely különbözik a gnu-féle verzióktól (egyszeri felhasználóként kb. annyit látok, hogy egy-két paraméter máshogy van, ha van egyáltalán, és pl. a find parancs esetén mindenféleképpen meg kell adni útvonalat, ahol keresni akarsz, míg a gnu-félétől elhagyható. Gondolom, forráskódban jelentősebb az eltérés.).
Szóval ez az alap-make és a gnu-féle make nem kompatibilis, a legtöbb program fordításához pedig gnu-féle make kell (a gnu-specifikus Makefile-okat a FreeBSD-féle make nem feltétlen tudja értelmezni).
Tehát az alap make mellé kell a gnu make is, ami az ütközések elkerülése miatt gmake néven települ.
A csomagok/portok, amennyiben szükséges, a fordításhoz a gmake-et használják (azaz nem a make parancsot, hanem a gmake parancsot kell kiadni, ennyi a nagy változás).
Másrészt nem vagyok C/C++-expert, de a linkelt hiba szerintem nem a make/gmake esetleges keveredésére vezethető vissza.