我需要将所有包含的库提取到 C 文件中,但遇到了一些问题。我的解决方案是这样的:
grep -oP '#(?:\/\*\w*\*\/|)include(?:\/\*\w*\*\/|\s*)"\w*.h"|<\w*.h>' main.c
例如,此正则表达式在注释中时采用库
/*#include <stdlib.h>*/
我不知道如何使该脚本只提供库名称而不包含 #include
如何修复我的正则表达式使其正常工作?
更新:
主程序
#include "string.h"
#include <stdlib.h>
#include "math.h"
#include "stdint.h"
#/*comment*/include /*comment*/ <fenv.h>
//#include <iostream>
#/**/include "something.h"
/* comment */#include "float.h"
/*#include "library.h"*/
int main() {
}
我想要的是:
"string.h"
<stdlib.h>
"math.h"
"stdint.h"
<fenv.h>
"something.h"
"float.h"
答案1
您应该要求编译器(或者更确切地说,C 预处理器)为您完成这项工作:
gcc -M main.c
这将产生一个 Makefile 样式的依赖关系,其中包含所有包含的头文件main.c
(包括传递性包含的头文件)。它将正确处理注释和其他预处理器指令(#if
等#ifdef
)。