Как иметь GNU, делают явно тест для отказа?

После того, как годы не использования делают, мне нужно оно снова, версия гну теперь. Я вполне уверен, я должен смочь сделать то, что я хочу, но не выяснил, как, или нашли ответ с Google, и т.д.

Я пытаюсь создать тестовую цель, которая выполнит мою программу неоднократно, сохраняя результаты в файле журнала. Некоторые тесты должны заставить мою программу прерываться. К сожалению, мой make-файл прерывается на первом тесте, который приводит к ошибке. У меня есть что-то как:

# Makefile
# 
test:
        myProg -h > test.log              # Display help
        myProg good_input >> test.log     # should run fine
        myProg bad_input1 >> test.log      # Error 1
        myProg bad_input2 >> test.log      # Error 2

С вышеупомянутым сделайте выходы после bad_input1 выполненными, никогда не добираясь до выполненного bad_input2.

62
задан JBRWilkinson 13 January 2015 в 17:12
поделиться

2 ответа

Попробуйте использовать следующий метод

var newMap = oldMap.ToDictionary(pair => pair.Key, pair=>(object)pair.Value);
-121--2634571-

:

public static class ObjectExtensions
{
    public static object GetPropertyValue(this object obj, string property)
    {
        return TypeDescriptor.GetProperties(obj)[property].GetValue(obj);
    }

    public static IDictionary<string, object> ToDictionary(this object obj)
    {
        IDictionary<string, object> result = new Dictionary<string, object>();
        PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(obj);
        foreach (PropertyDescriptor property in properties)
        {
            result.Add(property.Name, property.GetValue(obj));
        }
        return result;
    }
}

Вы можете использовать его как

 новый словарь < последовательность, последовательность > () .ТоСловарь ();
-121--2634577-

Попробуйте запустить его как

make -i

или

make --ignore-errors

, который игнорирует все ошибки в всех правилах.

Я бы также предложил запустить его как

make -i 2>&1 | tee results

, чтобы вы получили все ошибки и выходные данные, чтобы увидеть, что произошло.

Просто слепо продолжать после ошибки, вероятно, не то, что вы действительно хотите сделать. Утилита make по своей природе обычно полагается на успешное выполнение предыдущих команд, так что она может использовать артефакты этих команд в качестве предпосылок для выполнения команд позже.

BTW Я настоятельно рекомендую получить копию книги О'Райлли по изготовлению . Первое издание имеет превосходный обзор основного характера производства, в частности его обратного цепного поведения. Более поздние издания все еще хорошие, но первый ред. все еще имеет наиболее четкое объяснение того, что на самом деле происходит. На самом деле, моя собственная копия - это первое, что я передаю людям, которые приходят ко мне спросить "WTF? вопросы "о создании! (-:

30
ответ дан 24 November 2019 в 16:36
поделиться

Поместите - перед командой, например: [

-myProg bad_input >> test.log

] GNU make тогда проигнорирует код выхода процесса.

119
ответ дан 24 November 2019 в 16:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: