如何确切了解制作的内容

时间:2014-01-27 14:13:32

标签: makefile

我为第三方项目提供了一些大型make文件,这些文件由于链接器问题而无法构建。

从查看make文件,我认为它应该执行类似:

LIBS = -lm
CC = gcc
bin = bin
myapp: $(bin)/main.o $(bin)/other.o $(bin)/etc.o
    $(CC) $(bin)/main.o $(bin)/other.o $(bin)/etc.o $(LIBS) -o myapp

gcc bin/main.o bin/other.o bin/etc.o -lm -o myapp

而不是错误,它似乎失败了类似的东西:它也没有将任何.o文件放在预期的bin / location中,只是将它们留在源目录中......

cc main.o -o myapp

但我无法找到可能来自的任何地方。有没有办法通过make文件获得某种堆栈跟踪?

我知道-n和-d,但似乎都没有告诉我什么目标行和文件yeilded那个命令,或者那里的哪一系列目标以及任何$()扩展的值(我期待的那个是唯一的myapp:我可以在任何一个makefile中找到...)

2 个答案:

答案 0 :(得分:0)

查看--debug选项。从我的联机帮助页:

  

- 调试[= FLAGS]

       Print debugging information in addition to normal processing.  If the
       FLAGS are omitted, then the behavior is the same as if -d was specified.
       FLAGS may be a for all debugging output (same as using -d), b for basic
       debugging, v for more verbose basic debugging, i for showing implicit
       rules, j for details on invocation of commands, and  m  for debugging
       while remaking makefiles.

答案 1 :(得分:0)

remake是一个非常好的选择,但是如下所示(保存为debug.mk)也可以提供很好的帮助。它不会像重拍一样告诉你,但它可能会告诉你足够的开始。

# Use as: MAKEFILES=debug.mk make
OLD_SHELL := $(SHELL)

ifneq (undefined,$(origin X))
override X = -x
endif

SHELL = $(if $@,$(warning Running $@$(if $<, (from: $<))$(if $?, (newer: $?))))$(OLD_SHELL) $(X)

如果您想了解更多有关正在发生的事情的话,您也可以在那里打印出其他自动变量。