The goal of CMake is to generate a Makefile, so I would go with something like this:
CMAKE_BUILD_DIR := some_dir
CMAKE_SOURCE_DIR := some_src_dir
$(CMAKE_BUILD_DIR)/Makefile: $(CMAKE_SOURCE_DIR)/CMakeLists.txt
cmake -S $(<D) -B $(@D)
.PHONY: $(CMAKE_BUILD_DIR)/built_executable_or_library # to allow CMake's make check the build
$(CMAKE_BUILD_DIR)/built_executable_or_library: $(CMAKE_BUILD_DIR)/Makefile
$(MAKE) -C $(@D) $(@F)
This should call CMake configure step when the Makefile does not exist and run make
directly to build whatever you need (probably you would need to tailor called targets to your needs). CMake's generated Makefiles check the generated build system itself, so it will be reconfigured as needed.