0

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

#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 来做同样的事情吗?

4

1 回答 1

0

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

于 2013-01-21T12:49:47.183 回答