2012-02-14 63 views
3

我想将我们的linux驱动程序代码压缩到仅在当前内核上运行的代码。它有部分被if语句忽略回到kernele 2.4.x我可以使用许多编译器标志从c程序导出使用的代码吗?

你有没有听说过将代码编译到一个输出的方式,这将是工作代码与所有被忽略的东西c编译器如果else语句?

我想知道如果我们可以运行make或gcc的东西,只会导致所有用于该构建的代码。

所以,如果我有下面这个.c文件,那么在运行make命令后,我应该只有最新内核所需的代码。

example.c

static somefunction .... { 
    avar = 0; 
#if (linux_ver >= 2.6.31) 
    some newer code 
#elseif (linux_ver >= 2.4.24) 
    some older code 
#else 
    original code 
#endif 

} 

后提取/冷凝,example.c只会阅读如下

static somefunction .... { 
    avar = 0; 
    some newer code 
} 
+1

的可能重复(http://stackoverflow.com/questions/525283/is-在那里 - 交流预处理器 - 它 - 消除 - ifdef-blocks-based-on-values-define) – 2012-02-14 05:29:57

回答

1

这就是预处理指令做了。尝试通过gcc -E运行代码(但要准备大量输出,因为所有#include都将被内联)。

+0

OP可能会希望避免粘贴包含文件,添加数百个空白行等等, #if'指令崩溃了。我相信这是一个工具,但我不知道名字... – 2012-02-14 05:30:07

相关问题