how cmake works