GCC:如何自定义编译生成的警告和错误
GCC: How to customising warning and errors generated from compilation
我的用例:
我有两个 c 语言文件: ApplicationCode.c
和 UserCode.c
。应用程序代码是由我的应用程序生成的,用户代码可供我的应用程序用户使用,他可以在其中编写自己的代码。
ApplicationCode.c
内部使用 UserCode.c
并调出它的 methods/function.
有一件事你可以在这里假设 ApplicationCode.c
永远不会有任何错误,但可能会有 gcc 编译器生成的警告。 UserCode.c
可以同时有错误和警告。
因此,在编译代码时,我想首先向用户显示他的代码错误。如果需要显示警告,则还显示由他的代码生成的警告,而不是来自 ApplicationCode.c
的警告(因为我不想公开我的 ApplicationCode.c
的代码)。
这里还有一个约束,我想在这里将 return 类型的警告显示为错误,为此我使用 -Werror=return-type
参数。
所以,我正在考虑以下三种方法来做到这一点:
如果我能够禁用所有警告并仅启用 -Wreturn-type
为此 here
提出了一个单独的问题
如果我能够指示 gcc(或重定向)仅错误消息到 stderr 并保留在 stdout 上。
为此也提出了一个单独的问题 here
如果我能够禁用 ApplicationCode.c
文件中的所有警告(默认情况下启用)并使用 -Werror=return-type
为 UserCode.c
我尝试到处搜索,但没有找到以上 3 个问题的任何解决方案。请告诉我如何解决上述问题,或者是否有其他更好的方法来解决我的用例?
更新 1:
这是我的代码文件看起来像
ApplicationCode.c
#include <stdio.h>
// some headers
// some application specific code
int testUserFunction(); // user function declaration
int main(int argc, char *a[]) {
int result = testUserFunction(); // calling user function
// some logic to use and evaluate result
}
UserCode.c
#include<stdio.h>
int testUserFunction(int input1)
{
// user will write his code below this
// user code
}
编译代码的基本命令:
gcc -o code.out ApplicationCode.c UserCode.c
or if there any other better way to do solve my use case ?
如果你不想“暴露ApplicationCode.c”,那你为什么要首先显示它的编译输出?解决方案:在某个秘密的地方编译它,让用户 link 他们的 UserCode.c 使用它。
我的用例:
我有两个 c 语言文件: ApplicationCode.c
和 UserCode.c
。应用程序代码是由我的应用程序生成的,用户代码可供我的应用程序用户使用,他可以在其中编写自己的代码。
ApplicationCode.c
内部使用 UserCode.c
并调出它的 methods/function.
有一件事你可以在这里假设 ApplicationCode.c
永远不会有任何错误,但可能会有 gcc 编译器生成的警告。 UserCode.c
可以同时有错误和警告。
因此,在编译代码时,我想首先向用户显示他的代码错误。如果需要显示警告,则还显示由他的代码生成的警告,而不是来自 ApplicationCode.c
的警告(因为我不想公开我的 ApplicationCode.c
的代码)。
这里还有一个约束,我想在这里将 return 类型的警告显示为错误,为此我使用 -Werror=return-type
参数。
所以,我正在考虑以下三种方法来做到这一点:
如果我能够禁用所有警告并仅启用
提出了一个单独的问题-Wreturn-type
为此 here如果我能够指示 gcc(或重定向)仅错误消息到 stderr 并保留在 stdout 上。 为此也提出了一个单独的问题 here
如果我能够禁用
ApplicationCode.c
文件中的所有警告(默认情况下启用)并使用-Werror=return-type
为UserCode.c
我尝试到处搜索,但没有找到以上 3 个问题的任何解决方案。请告诉我如何解决上述问题,或者是否有其他更好的方法来解决我的用例?
更新 1: 这是我的代码文件看起来像
ApplicationCode.c
#include <stdio.h>
// some headers
// some application specific code
int testUserFunction(); // user function declaration
int main(int argc, char *a[]) {
int result = testUserFunction(); // calling user function
// some logic to use and evaluate result
}
UserCode.c
#include<stdio.h>
int testUserFunction(int input1)
{
// user will write his code below this
// user code
}
编译代码的基本命令:
gcc -o code.out ApplicationCode.c UserCode.c
or if there any other better way to do solve my use case ?
如果你不想“暴露ApplicationCode.c”,那你为什么要首先显示它的编译输出?解决方案:在某个秘密的地方编译它,让用户 link 他们的 UserCode.c 使用它。