проблема при захвате ошибки `make` - PullRequest
0 голосов
/ 04 августа 2011

Цель этого сценария perl - сначала выполнить рефакторинг файла .cpp, а затем скомпилировать весь пакет.Если все идет хорошо, переходите к следующему файлу, в противном случае замените исходный файл из каталога backup и так далее.Ниже приведен сценарий perl для запуска makefile пакета.

@lcpp = `ls *.cpp`; 
chomp(@lcpp);
foreach (@lcpp) {
print "processing file $_ ...";
`cp demac_dir/$_ .`;
if(2 == `make`) {
  print "\n\t\t\tError in the file\n";
  `cp backup/$_ .`;
  print "reverting back to the original file and building the package again";
  `make`;
}
else {#when successfully compiled
  print "successfully compiled the package with file $_";
}
}

Этот сценарий выполняется до тех пор, пока я не получу «переработанный» файл с ошибками компилятора.Сценарий не может перехватить ошибку, возвращаемую make я думаю.Или я что-то упустил.

Ответы [ 2 ]

2 голосов
/ 04 августа 2011

Почти наверняка ошибки идут в STDERR, который не фиксируется обратными галочками.Используйте Capture :: Tiny для простого захвата обоих выходных потоков.

1 голос
/ 04 августа 2011

Если вы используете system() для вызова make, вы можете проверить, удалось ли make.см perldoc -f system:

    @args = ("command", "arg1", "arg2");
    system(@args) == 0
         or die "system @args failed: $?"

You can check all the failure possibilities by inspecting $?
like this:

    if ($? == -1) {
        print "failed to execute: $!\n";
    }
    elsif ($? & 127) {
        printf "child died with signal %d, %s coredump\n",
            ($? & 127),  ($? & 128) ? 'with' : 'without';
    }
    else {
        printf "child exited with value %d\n", $? >> 8;
    }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...