我正试图编译一个大型项目(https://github.com/ESCOMP/CTSM)。如果可能的话,我想在不编辑代码的情况下按原样编译它(众所周知,它可以在许多平台上成功构建(。
我正在使用gcc (SUSE Linux) 11.2.1
。我得到
在函数ncmp:/run/media/dominic/hdbtrfs/dominic/git/ECOMP/CTSM/cime/src/share/ttiming/gptl.c:4069:1:错误:控制到达非无效函数的末尾[-Weror=return type]
。我相信早期版本的gcc在这种情况下只会给出警告,而不是错误。
/*
** ncmp: compares values of memory adresses pointed to by a pointer. for use with qsort
*/
static int ncmp( const void *pa, const void *pb )
{
static const char *thisfunc = "GPTLsetoption";
const char** x = (const char**)pa;
const char** y = (const char**)pb;
if( *x > *y )
return 1;
if( *x < *y )
return -1;
if( *x == *y )
GPTLerror("%s: shared memory address between timersn", thisfunc);
}
我希望可以通过在函数末尾插入一个虚假的return
语句来解决这个问题,但由于我有兴趣尝试构建一个未修改的代码版本(我目前不是该项目的贡献者,所以不能向上游推送更改(,我想知道是否有一种变通方法可以使用编译器标志将此错误转换为警告?
根据请求,这里是makefile生成的gcc调用:
mpicc -c -I/run/media/dominic/hdbtrfs/dominic/git/ESCOMP
/CTSM/cime/src/share/timing -std=gnu99 -O -DCESMCOUPLED
-DFORTRANUNDERSCORE -DNO_R16 -DCPRGNU -DCESMCOUPLED
-DFORTRANUNDERSCORE -DNO_R16 -DCPRGNU -DNUOPC_INTERFACE
-DHAVE_MPI /run/media/dominic/hdbtrfs/dominic/git/ESCOMP
/CTSM/cime/src/share/timing/gptl.c
我想知道是否有一种变通方法可以使用编译器标志将此错误转换为警告?
我希望-Wno-error
选项会产生这种效果。也可以将其范围缩小到您报告的特定诊断,但要注意:单凭命令行选项无法将影响缩小到该问题的特定实例。
附录
这个问题经过编辑,显示诊断类别为return-type
,我可以说,人们会使用-Wno-error=return-type
来发出所有此类诊断的警告,而不是错误。
-Werror
将所有警告提升为错误。对于-Wno-error=WarningName
(如-Wno-error=return-type
(的特定警告,您可以将其反转,这在警告选项的GCC文档中有明确的说明:
此开关[
-Werror=
]采用否定形式,用于否定特定警告的-Werror
;例如-Wno-error=switch
使得-Wswitch
警告即使在-Werror
有效时也不是错误。