Backtrace для GNU make - PullRequest
       9

Backtrace для GNU make

6 голосов
/ 17 февраля 2011

Есть ли какой-нибудь способ заставить GNU make печатать «обратную трассировку» целей, которые привели к выполнению команды в случае сбоя? Я регулярно имею дело с сильно запутанными make-файлами при решении проблем переносимости при создании программного обеспечения на новой системе, и кажется, что это должно быть чрезвычайно простым делом, которое может помочь make в отладке, но я не могу найти способ запросить Это. Я бы хотел увидеть что-то вроде:

gcc: error: ...
make[2]: error: gcc ...
make[2]: error building target bar
make[2]: error building dependency bar for target foo
make[1]: error: make -C subdir
make[1]: error building target subdir
make[1]: error building dependency subdir for target all
...

, показывающий полный путь зависимости для того, как сбойная команда закончилась выполнением.

Есть ли способ сделать это?

Ответы [ 3 ]

4 голосов
/ 06 февраля 2012

Использование римейк . Это исправленная версия GNU Make, которая добавляет улучшенные отчеты об ошибках, возможность понятного отслеживания выполнения и отладчик.

3 голосов
/ 17 февраля 2011

make -p и make -d предоставляют интересную информацию, но не совсем то, что вы просите. См. справочную страницу производителя .

1 голос
/ 27 апреля 2015

Да, римейк может дать вам обратную трассировку. Вот пример использования Makefile ремейка, который показывает это:

    remake --debugger Makefile
    GNU Make 4.1+dbg0.91
    Built for x86_64-unknown-linux-gnu
    Copyright (C) 1988-2014 Free Software Foundation, Inc.
    Copyright (C) 2015 Rocky Bernstein.
    License GPLv3+: GNU GPL version 3 or later 
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.
    Reading makefiles...
    Updating makefiles....
    -> (/src/github/remake/Makefile:608)
    Makefile: Makefile.in config.status
    remake<0> <b>bt</b>
    =>#0  Makefile at /src/github/remake/Makefile:608
    remake<1> <b>s</b>
    -> (/src/github/remake/Makefile:594)
    Makefile.in: 
    remake<2> <b>bt</b>
    =>#0  Makefile.in at /src/github/remake/Makefile:594
      #1  Makefile at /src/github/remake/Makefile:608
    remake<3> <b>s</b>
    -> (/src/github/remake/Makefile:618)
    config.status: configure
    remake<4> <b>bt</b>
    =>#0  config.status at /src/github/remake/Makefile:618
      #1  Makefile at /src/github/remake/Makefile:608
    remake<5> <b>s</b>
    -> (/src/github/remake/Makefile:621)
    configure: 
    remake<6> <b>bt</b>
    =&lt#0  configure at /src/github/remake/Makefile:621
      #1  config.status at /src/github/remake/Makefile:618
      #2  Makefile at /src/github/remake/Makefile:608
    remake<7> 

Вы также можете установить точку останова для конкретной цели (break), перейти туда (continue) и backtrace, что. А в случае ошибки вы получите обратный след от того места, где вы были, когда разбились.

...