1

我正在尝试从源代码构建trace-cmd.git;最糟糕的是,我已经在同一台机器上成功地构建过一次;但是没有保留任何笔记,也无法说出在此期间可能发生的事情。

所以现在我正在尝试重建,我得到了可怕的:

trace-cmd$ make
make: *** No rule to make target `/media/disk/trace-cmd/event-parse.c', needed by `event-parse.o'.  Stop.

好的,让我们看看调试的内容:

trace-cmd$ make -d
...
    Successfully remade target file `trace_python_dir'.
    Pruning file `tc_version.h'.
    Considering target file `libparsevent.a'.
      Considering target file `event-parse.o'.
        Pruning file `/media/disk/src/trace-cmd/event-parse.c'.        ## THIS EXISTS!
        Pruning file `.event-parse.d'.
        Considering target file `/media/disk/trace-cmd/event-parse.c'. ## THIS DOESN'T???
         File `/media/disk/trace-cmd/event-parse.c' does not exist.
        ...
          Trying pattern rule with stem `event-parse.w'.
          Trying implicit prerequisite `/media/disk/trace-cmd/SCCS/s.event-parse.w'.
         Trying pattern rule with stem `event-parse'.
         Rejecting impossible implicit prerequisite `/media/disk/trace-cmd/event-parse.w'.
         No implicit rule found for `/media/disk/trace-cmd/event-parse.c'.
         Finished prerequisites of target file `/media/disk/trace-cmd/event-parse.c'.
        Must remake target `/media/disk/trace-cmd/event-parse.c'.
make: *** No rule to make target `/media/disk/trace-cmd/event-parse.c', needed by `event-parse.o'.  Stop.

好的,这是怎么回事?当然实际文件存在:

trace-cmd$ ls -la /media/disk/src/trace-cmd/event-parse.c
-rw-r--r-- 1 user user 121563 2013-03-20 19:03 /media/disk/src/trace-cmd/event-parse.c

……但这是!!和:/media/disk/src/trace-cmd/event-parse.c

  • make已经找到了一次;
  • 然而make,出于某种原因,决定/src/从路径中删除,

...并且该文件显然不存在:

trace-cmd$ ls /media/disk/trace-cmd/event-parse.c
ls: cannot access /media/disk/trace-cmd/event-parse.c: No such file or directory

有人可以向我解释一下,出于什么可能的原因可以make决定删除路径的一部分,以使其找不到最初具有正确引用的文件?

4

1 回答 1

1

明白了 - 我想我会专注于那个.event-parse.d文件:

trace-cmd$ head -n 4 .event-parse.d 
event-parse.o: /media/disk/trace-cmd/event-parse.c \
 /usr/include/stdio.h /usr/include/features.h /usr/include/bits/predefs.h \
 /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \
 /usr/include/gnu/stubs.h /usr/include/gnu/stubs-32.h \

...确实,那是错误的路径...如果我删除此.d文件会怎样?

trace-cmd$ rm .event-parse.d 
trace-cmd$ make
  COMPILE FPIC           event-parse.o
make: *** No rule to make target `/media/disk/trace-cmd/trace-seq.c', needed by `trace-seq.o'.  Stop.

天啊。应该还有更多:

trace-cmd$ ls .*.d
.event-parse.d      .plugin_kmem.d          .trace-filter.d      .trace-options.d    .trace-seq.d
.kbuffer-parse.d    .plugin_kvm.d           .trace-ftrace.d      .trace-output.d     .trace-split.d
.kernel-shark.d     .plugin_mac80211.d      .trace-graph.d       .trace-plot-cpu.d   .trace-stack.d
...

……确实有;显然缓存了以前编译的文件,实际上我是在另一个目录中编译的。如果我将它们全部删除:

trace-cmd$ rm .*.d
trace-cmd$ make
...
gcc --shared event-parse.o trace-seq.o parse-filter.o parse-utils.o trace-util.o trace-input.o trace-ftrace.o trace-output.o trace-recorder.o trace-restore.o trace-usage.o trace-blk-hack.o kbuffer-parse.o ctracecmd_wrap.o -o ctracecmd.so
Note: to build the gui, type "make gui"
      to build man pages, type "make doc"

好吧,这似乎奏效了;我又恢复了快乐:)
干杯!

于 2013-07-31T04:48:00.423 回答