xmake-io / xmake

🔥 A cross-platform build utility based on Lua
https://xmake.io
Apache License 2.0
10.04k stars 786 forks source link

Explicitly point out the source file on failing of compile stage #1833

Closed xq114 closed 2 years ago

xq114 commented 2 years ago

你在什么场景下需要该功能?

xmake默认并行编译,一个问题是在发生错误的时候不知道是编译哪个文件的时候出错。

[1%] a.cpp
[1%] b.cpp
[1%] c.cpp
[1%] d.cpp // the four source file are compiled in parallel
error: @programdir/modules/private/async/runjobs.lua:232: @programdir/modules/private/action/build/object.lua:78: @programdir/modules/core/tools/gcc.lua:497: 
xxx.h: error: ...
...

这样报错信息只有编译器本身的信息,没有xmake提供的哪一个文件编译出错的信息。并且所有信息的排列容易让人以为出错的就是d.cpp,造成误导(实际上错误可能来源于a.cpp~d.cpp的任何一个)

描述可能的解决方案

编译失败的时候明确指出哪一个文件是错误的来源

waruqi commented 2 years ago

编译器本身错误信息不就带了 文件名和路径了么

xq114 commented 2 years ago

编译器本身错误信息不就带了 文件名和路径了么

如果错误在源文件里面确实编译器会指出,但错误在头文件里面gcc不会指出编译的是哪一个源文件

waruqi commented 2 years ago

这个就不太好搞了 如果xmake额外加了路径提示,编译器如果也带了 那就重复了,还会干扰 vs 和 vscode 上编译错误的正常解析和跳转

即使报错在头文件,默认提示应该也是定位到头文件才对。。

出错后 自己加个 -j1 看下就好了

waruqi commented 2 years ago

或者直接加 -v 也能看到完整路径的。。

In file included from src/tbox/math/impl/math.c:25:
In file included from src/tbox/math/impl/../math.h:30:
In file included from src/tbox/math/impl/../fixed6.h:29:
In file included from src/tbox/math/impl/../fixed16.h:30:
In file included from src/tbox/math/impl/../../libm/libm.h:28:
In file included from src/tbox/math/impl/../../libm/math.h:37:
src/tbox/math/impl/../../libm/ceil.h:24:2: error:
#error

现在是提取了 error:xx 信息,所以默认上面的 原路径被strip掉了,只能看到最近一层,这个暂时也没办法改进,涉及到 raise 和 errors的回溯处理

waruqi commented 2 years ago

我稍微改进了下,非 verbose 模式,尾部追加 源路径,因为放开头不好处理,容易干扰 vs/vscode解析

error: src/tbox/math/impl/../../libm/ceil.h:24:2: error:
#error
 ^
1 error generated.
  > in src/tbox/math/impl/math.c
xq114 commented 2 years ago

这里还有点问题,现在编译c和c++的时候都有指出,但编译cuda程序的时候没有指出出错的是哪个文件

waruqi commented 2 years ago

你可以参考 gcc.lua 那个,在 nvcc.lua 里面也加上这个