1

我正在制作一个使用大量函数指针的构建,它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] 并没有看到任何让我印象深刻的东西。我可以以某种方式使用objdumpnm将函数名称通过管道传输到cmake文件吗?

编辑:

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

4

1 回答 1

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。

于 2013-06-13T01:00:16.773 回答