以编程方式获取函数名称

时间:2013-06-13 00:30:18

标签: c build cmake

我正在构建一个使用大量函数指针的构建,struct模糊地看起来像这样:

struct functionArray {
    void (*func)(void);
} funcarray[20] = {
    func1,
    func2,
    func3,
    func4
};

func1func2,...和func20位于名为functions.c的文件中

我希望能够在构建期间执行此操作。例如,如果我改为使用宏:

funcarray[20] = {
    FUNCTION_LIST
};

我可以使用生成的头文件执行此操作。有点像:

// testheader.h.in
#define FUNCTION_LIST @functions_in_file@

反正我能做到吗?我知道我可以来回编辑文件,但我这是第二次或第三次我鼓励这样做。我仔细查看了[cmake reference] [1]并没有看到任何对我有任何影响。我可以以某种方式使用objdumpnm将函数名称传递给cmake文件吗?

编辑:

.o文件中获取函数名称也应该有效。我想它没有理由成为.c文件。

1 个答案:

答案 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。