我试图调试一个编译问题,但我似乎无法获得GCC(或者它可能是make??)来显示它正在执行的实际编译器和链接器命令。
下面是我看到的输出:
CCLD libvirt_parthelper
libvirt_parthelper-parthelper.o: In function `main':
/root/qemu-build/libvirt-0.9.0/src/storage/parthelper.c:102: undefined reference to `ped_device_get'
/root/qemu-build/libvirt-0.9.0/src/storage/parthelper.c:116: undefined reference to `ped_disk_new'
/root/qemu-build/libvirt-0.9.0/src/storage/parthelper.c:122: undefined reference to `ped_disk_next_partition'
/root/qemu-build/libvirt-0.9.0/src/storage/parthelper.c:172: undefined reference to `ped_disk_next_partition'
/root/qemu-build/libvirt-0.9.0/src/storage/parthelper.c:172: undefined reference to `ped_disk_next_partition'
collect2: ld returned 1 exit status
make[3]: *** [libvirt_parthelper] Error 1
我想看到的应该是这样的:
$ make
gcc -Wall -c -o main.o main.c
gcc -Wall -c -o hello_fn.o hello_fn.c
gcc main.o hello_fn.o -o main
注意这个例子是如何显示完整的gcc
命令的。上面的例子只显示了“CCLD libvirt_parthelper”这样的内容。我不知道如何控制这个行为。
8条答案
按热度按时间dw1jzc5e1#
调用模拟运行:
这将显示
make
尝试执行的操作。jdzmm42g2#
建置系统独立方法
是另一个选项。示例
Makefile
:输出量:
这将为
make
设置特殊的SHELL
变量,并且-x
告诉sh
在执行之前打印展开的行。相对于
-n
的一个优点是它实际上运行命令。我发现对于一些项目(eidogg. Linux内核),-n
可能会比平常早得多地停止运行,可能是因为依赖性问题。这种方法的一个缺点是,您必须确保将要使用的shell是
sh
,这是Make使用的默认shell,因为它们是POSIX,但可以使用SHELL
make变量进行更改。做
sh -v
也很酷,但是Dash 0.5.7(Ubuntu 14.04sh
)忽略了-c
命令(这似乎是make
使用它的方式),所以它什么也不做。您也会对
make -p
感兴趣,它打印集合变量的值。CMake生成的Makefile始终支持
VERBOSE=1
例如:
专用问题:Using CMake with GNU Make: How can I see the exact commands?
to94eoyn3#
由autotools生成的库makefile(您必须发出的
./configure
)通常有一个verbose选项,所以基本上,使用make VERBOSE=1
或make V=1
应该可以给予完整的命令。但这取决于生成makefile的方式。
-d
选项可能会有所帮助,但它会给予非常长的输出。flvtvl504#
从GNU Make 4.0版开始,
--trace
参数是一种很好的方式来说明makefile做什么以及为什么做,输出如下行:或
uidvcgyl5#
使用
make V=1
其他建议如下:
make VERBOSE=1
-至少从我的试验来看不起作用。make -n
-仅显示逻辑操作,不显示正在执行的命令行。例如CC source.cpp
make --debug=j
-也可以使用,但也可能启用多线程构建,从而导致额外的输出。chhkpiq46#
我喜欢用途:
https://linux.die.net/man/1/make
--调试[=标志]
除正常处理外,还打印调试信息。如果省略FLAGS,则行为与指定
-d
时相同。FLAGS可以是所有调试输出的(与使用-d
相同)、b
用于基本调试、v
用于更详细的基本调试、i
用于显示隐式规则、j
用于命令调用的详细信息,m
用于在重新生成makefile时进行调试。wb1gzix07#
根据您的automake版本,您还可以使用以下命令:
参考:* AM_DEFAULT_VERBOSITY *
V=1
不适用于我。*mm9b1k5b8#
make
时将执行的命令: