我的项目有以下设置:
~/proj -> includes makefile and other stuff
~/proj/headers -> includes c header files
~/proj/source -> includes C source files
当在主树文件夹~/proj中执行make时,错误显示为如下文件名:
"source1.c" error variable...etc
怎么可能让make显示出错文件的绝对路径。类似这样的东西:
~/proj/source/source1.c" error variable etc...
这是一个错误的例子:
Dependencies for mem_init.c
Compiling mem_init.c
"mem_init.c", line 513: warning: implicit function declaration: init_mem (E_NO_IMPLICIT_DECL_ALLOWED)
cc: acomp failed for mem_init.c
这根本不可能,因为打印这些错误的不是make:而是编译器。您想问的是,如何(或是否)让编译器在其错误消息中显示绝对路径。当然,为了问这个问题,你必须指定你使用的编译器。
如果您在命令行上将源文件的绝对路径传递给编译器,则编译器可能会在错误消息中使用相同的路径。也就是说,如果运行cc -o foo.o foo.c
,则错误消息将是相对于foo.c
的,但如果运行cc -o foo.o /home/me/proj/source/foo.c
,则错误信息将相对于/home/me/proj/source/foo.c
的。
如果这是真的,那么您可以将您的make规则更改为以下内容(如果您使用的是GNU新版本):
%.o : %.c
$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $(abspath $<)
或者其他什么。