У меня есть проблема с проектом GNU make в Windows 10.
Я пытаюсь добавить модульные тесты Google в свой Makefile, и я начал экспериментировать с такими целями:
utest_compile:
@echo Compile unit test
g++ -o Utest.exe $(COMPILE_FLAGS) $(SOURCES)
@echo Compile finished!
utest_run:
@echo Running unit tests
Utest.exe --gtest_color="yes"
@echo Run finished!
utest: utest_compile utest_run
Запуск utest_complie
и utest_run
по отдельности работает отлично, но при попытке запустить utest
цветовые коды на выходе каким-то образом запутываются, как печать [0;32m[ OK ] [mDummytest
в цвете по умолчанию вместо печати [ OK ] Dummytest
в зеленом цвете.
Я пытался выяснить, как GNU анализирует вывод и передает его, особенно в отношении фальшивых целей и их зависимостей, но любое правило, которое я смог найти, в данном случае, похоже, не применимо. (например, правила при сохранении вывода в переменной или при перенаправлении в файл и т. д.)
Знаете ли вы, какие правила синтаксического анализа / форматирования применяются здесь и как сохранить коды цветов от повреждения?
EDIT
Тем временем я узнал следующее:
Это прекрасно работает (печатает цветной текст):
utest: utest_compile
@echo Run unit tests...
-$(TARGET_DIR)/UTest.exe --gtest_color="yes" > ut.log
@echo Result:
@tail -n 1 ut.log
@echo Unit test execution finished.
Но это не удается (печатает нечеткий нечеткий текст):
utest: utest_compile
@echo Run unit tests...
$(RM) -f ut.log
-$(TARGET_DIR)/UTest.exe --gtest_color="yes" > ut.log
@echo Result:
@tail -n 1 ut.log
@echo Unit test execution finished.
Я подозреваю, что дополнительная строка, использующая rm, вероятно, переключается между режимами терминала. Я использую встроенный в терминал Linux интерпретатор терминала Linux 10, который, скорее всего, все еще находится в бета-версии, поэтому он может объяснить проблему, но я до сих пор не знаю фактических деталей здесь, и я был бы рад любой информации.