Другой подход заключается в создании еще одного файла Makefile в каталоге, из которого вы хотите запустить make, с содержимым примерно таким:
all:
cd ./build; make $(MFLAGS)
Тогда вы можете просто набрать "make" из каталога верхнего уровня.
Я не думаю, что есть способ заставить cmake сгенерировать Makefile, который можно запустить из любого места. Это просто не то, как обычно используется make.
Но, возможно, вы сможете уговорить cmake создать дополнительный вспомогательный make-файл в корневом каталоге вашего проекта с помощью некоторого cmake, подобного следующему в CMakeLists.txt:
configure_file(ProjectRootMakefile.in ${CMAKE_SOURCE_DIR}/Makefile @ONLY)
(При необходимости замените это "$ {CMAKE_SOURCE_DIR}" на выражение, которое разрешается в корневой каталог вашего проекта)
И вам нужно создать файл ProjectRootMakefile.in в вашем дереве исходных текстов, например:
all:
cd @CMAKE_BINARY_DIR@; make $(MFLAGS)
, который будет использоваться в качестве шаблона для корневого Makefile вашего проекта. (Убедитесь, что вы используете символ табуляции, а не пробелы, перед "cd")
Я не проверял эти предложения, но здесь должно быть достаточно, чтобы дать вам общее представление.