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

C++ shared library define and undefine functionality

本文关键字:定义 取消 功能 c++ 共享      更新时间:2023-10-16

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

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

但是,如果事先编译了库而没有定义符号,则这不起作用。注意,我的库是而不仅仅是头文件。

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

set_property( TARGET my_lib PROPERTY COMPILE_DEFINITIONS "PROFILEAPP")

这确实有效,但我必须改变我的客户端应用程序中的链接选项,以应付两个不同的。so文件。然而,我想知道这是不是该走的路?像boost这样的库在处理机器差异方面是否做了类似的事情?我是否可以通过在客户端应用程序中定义PROFILEAPP来完成相同的操作?

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