2013-01-15 104 views
0

我的工作有哪些包含类似功能模板一些头文件共享库时的ifdef。但是,如果有人想链接到这个库,我不希望他们在包含这些头文件时不得不拿起我的编译器标志。是否有编译库时解决这些#ifdefs,从而使生成的头文件看起来是这样的方式:解决编译共享库

void functionA(...); 

回答

0

前面有个答案暗指这种方法,即如果定义了somecompilerflag,那么当编译头文件(实际上复制到另一个目录)时,在文件顶部插入#define somecompilerflag。为使Makefile,沿着线的东西:什么改变你的第一个预处理器指令进行的#ifndef代替的#ifdef

ifeq ($(somecompilerflag),-Dsomecompilerflag) 
    sed '1 i\#define somecompilerflag' $(header) > headersDir/$(header) 
else 
    cp $(header) headersDir/$(header) 
endif 
0

您可以添加定义了你的Makefile。你可以看看这里如何做到这一点:Passing C/C++ #defines to makefile

+0

我知道如何获取_my_代码来获取定义,但是我希望_other_代码不需要。 –

1

如果你的目标的Linux &合作,有一种叫“pkg配置”,这是为一个特定的安装库检索编译器和连接器设置了一个框架。另一种选择是编写sed脚本将模板头文件转换为正确的版本进行安装。我甚至在编译这个库之前就这么做了,因为那样你可以确保在编译时使用相同的头文件并且它适合。

0

这样,如果没有设置标志,FUNCTION将解析为functionA,这听起来像你想要的。

如果您想进一步研究并使其他人甚至不会看到预处理器指令,那么您可以简单地通过预处理器运行代码,并将结果输出交给人员。

+0

我希望用户在编译库时能够选择'functionA'或'functionB',但是在那之后不需要担心我的编译器标志。两者同样可能。我也想给人们编译库的代码,而不仅仅是编译版本(可能是系统特定的)。 –