Я пытаюсь передать вывод компилятора команде tee в windows, но я столкнулся с проблемой, когда если сбой компилятора внутри, он продолжит компиляцию следующего файла, когда я захочу его стоп. Есть ли способ, чтобы статус выхода первой команды был статусом выхода второй команды?Как получить статус выхода из первой команды в трубке в make?
$(ODIR)/%.o: %.c $(DEPS)
$(CC) -c -o [email protected] $< $(CFLAGS) 2>&1 | tee build_log.txt
Если вы установили SHELL в/bin/bash, вам не нужно использовать 'bash -c ...' в командной строке. Тот или другой будет делать. По крайней мере, в системе UNIX ... надеюсь, и в Windows. Хотя в Windows (если вы не используете cygwin) этот путь не будет работать. – MadScientist
@MadScientist Есть ли способ использовать переменную 'SHELL' в Makefile, так что _bash_ будет включать параметр' pipefail'? – bobbogo
Не легко: bash не поддерживает это как параметр командной строки. Но все, что я имел в виду выше, вы можете просто написать 'set -o pipefail; (exit 1) | & cat' вам не нужно добавлять часть 'bash -c'. Единственный способ, который я знаю сделать для всех рецептов без явного добавления их к каждому из них (либо в каталог, либо через переменную), - это создать файл, содержащий эту команду, например 'initfile', а затем добавить' export BASH_ENV = initfile' в ваш файл. – MadScientist