我正在构建一个使用大量函数指针的构建,struct
模糊地看起来像这样:
struct functionArray {
void (*func)(void);
} funcarray[20] = {
func1,
func2,
func3,
func4
};
func1
,func2
,...和func20
位于名为functions.c的文件中
我希望能够在构建期间执行此操作。例如,如果我改为使用宏:
funcarray[20] = {
FUNCTION_LIST
};
我可以使用生成的头文件执行此操作。有点像:
// testheader.h.in
#define FUNCTION_LIST @functions_in_file@
反正我能做到吗?我知道我可以来回编辑文件,但我这是第二次或第三次我鼓励这样做。我仔细查看了[cmake reference] [1]并没有看到任何对我有任何影响。我可以以某种方式使用objdump
或nm
将函数名称传递给cmake
文件吗?
编辑:
从.o
文件中获取函数名称也应该有效。我想它没有理由成为.c
文件。
答案 0 :(得分:2)
好的,这是一种方法。生成目标文件functions.o
,然后使用
nm functions.o | awk '/[0-9a-f]+ T / { print $3 "," }' > function_list.h
使用这样的代码
struct functionArray {
void (*func)(void);
} funcarray[20] = {
#include "function_list.h"
};
然后你应该能够整合它。请注意,“functions.o”中的函数数量必须精确为20。