Передача VERBOSE=1
в субмарку не имеет никакого эффекта. Если ваша пользовательская команда имеет значение make
любого типа, она получит установку без вывода сообщений через MAKEFLAGS
из верхнего файла Makefile (сгенерированного cmake
). Можно избавиться от --silent
, явно настроив MAKEFLAGS
перед вызовом make
, то есть:
$ cat Makefile
all:
env -i MAKEFLAGS=$(subst s,,$(MAKEFLAGS)) make -f Makefile2
$(VERBOSE).SILENT:
$ cat Makefile2
all:
echo "In Makefile2: $@"
echo "MAKEFLAGS = $(MAKEFLAGS)"
Выход (-k
предназначен только для проверки того, что только -s
флаг убирается):
$ make -k
echo "In Makefile2: all"
In Makefile2: all
echo "MAKEFLAGS = k"
MAKEFLAGS = k
Обратите внимание, что верхний уровень Makefile
все еще молчит, а подфайл печатается как обычно.
Вы можете попытаться обновить COMMAND
add_custom_command
соответственно. Рабочий пример:
$ cat CMakeLists.txt
add_custom_command(
OUTPUT bar
COMMAND env "MAKEFLAGS=$(subst s,,$(MAKEFLAGS))" make -f ../Makefile2
VERBATIM
)
add_custom_target(foo DEPENDS bar)
Вывод:
$ cmake .
...
$ make foo
[100%] Generating bar
make[4]: Entering directory '/path/to/dir'
echo "In Makefile2: all"
In Makefile2: all
echo "MAKEFLAGS = w"
MAKEFLAGS = w
make[4]: Leaving directory '/path/to/dir'
[100%] Built target foo