C ++共享库定义和取消定义功能

时间:2013-01-21 12:43:18

标签: c++ linux cmake shared-libraries

我有一个关于使用共享库特定包含功能的问题。我有自己的小型代码内部分析器,我在多个项目中使用,因此通常包括作为共享库。最初我想使用编译时标志来转换分析代码。例如:

#ifdef PROFILEAPP
class Profiler {
   static void start() { ... }
   static void stop() { ... }
};
#else
 class Profiler {
   static void start(){}
   static void stop(){} 
 };

但是,如果在事先编译lib而不定义符号,则这不起作用。请注意,我的库仅标题。

所以我发现我可以使用cmake命令编译两个不同的目标:

set_property( TARGET my_lib PROPERTY COMPILE_DEFINITIONS "PROFILEAPP")

这确实有效,但我必须更改客户端应用程序中的链接选项,以应对两个不同的.so文件。但是,我想知道这是不是要走了?像boost这样的库在机器差异方面做了类似的事吗?有没有什么方法可以通过在我的客户端应用程序中定义PROFILEAPP来做同样的事情?

1 个答案:

答案 0 :(得分:0)

保持两种不同的构建配置基本上是您唯一能做的事情。最终你会发现为你的应用程序创建几个构建配置可能是最简单的。调试,配置文件,发布等