Я использую Makefile (с GNU make running под Linux), чтобы автоматизировать мою работу во время рефакторинга Python script. script создает выходной файл, и я хочу убедиться, что выходной файл остается неизменным в моих рефакторингах.
Тем не менее, я не нашел способа получить код состояния команды, чтобы повлиять на последующую команду shell, если команда.
Следующее правило иллюстрирует проблему:
check-cond-codes:
diff report2008_4.csv report2008_4.csv-save-for-regression-testing; echo no differences: =$$!=
diff -q poalim report2008_4.csv; echo differences: =$$!=
Первый "diff" сравнивает два равных файла, а второй сравнивает два разных файла. Выход:
diff report2008_4.csv report2008_4.csv-save-for-regression-testing; echo no differences: =$!=
no differences: ==
diff -q poalim report2008_4.csv; echo differences: =$!=
Files poalim and report2008_4.csv differ
differences: ==
Итак, очевидно, "$$!" это неверная переменная, чтобы зафиксировать код состояния "diff". Даже используя SHELL: =/bin/bash в начале Makefile не решила проблему.
Переменная, возвращающая значение, которое мне нужно, будет (если оно вообще существует) будет использоваться в команде "if" в реальном правиле.
Альтернатива создания небольшой ad-hoc-оболочки script вместо написания всех команд inline в Makefile нежелательна, но я буду использовать ее в качестве последнего средства.
по теме: