c++共享库定义和取消定义功能
C++ shared library define and undefine functionality
我有一个关于使用共享库的特定功能包含的问题。我有自己的小型代码内分析器,我在多个项目中使用它,因此通常将其作为共享库包含。最初我想使用编译时间标志来打开分析代码。例如:
#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来完成相同的操作?
保持两种不同的构建配置本质上是您唯一可以做的事情。最终,您会发现为您的应用程序创建几个构建配置可能是最简单的。调试、配置文件、发布等
相关文章:
- C++宏定义和取消定义
- C++错误:在类中取消对main的定义引用
- 在宏中定义然后取消定义预处理器变量
- 如何在不取消定义类型的情况下为 C++ 中的类型编写 getter?
- 取消脱壳:使用模板在多行类型定义中添加一个尖括号后的新行
- 在自定义双链接列表中的自定义迭代器的取消运算符,找不到二进制操作员
- 如果我返回const定义的对象,为什么const关键字被取消资格
- 在Ubuntu 12.04.1 LTS libssl-libcrypto上取消定义引用
- 正在取消引用自定义结构字段的迭代器
- 取消定义引用..:从模板类继承
- 自定义 std::shared_ptr 或 boost::shared_ptr 以在 NULL 取消引用时引发异常
- 为什么我的指针在 main 中取消引用后具有不同的值,而不是在我自己的自定义函数中取消引用它时?
- 关于智能指针中取消引用和成员选择运算符的定义
- 我可以显式取消定义特定函数的宏吗?
- 取消引用悬空指针是否是未定义的行为
- 取消引用等于 nullptr 的指针是否是标准的未定义行为?
- C++/Qt定义/取消定义Qt_NO_SESSIONMANAGER宏
- 需要一个头文件,取消定义在windows.h中的所有定义
- 在取消定义宏函数之前,在宏函数中使用/复制宏变量的值:可能吗?
- #定义/#取消定义一个具有特殊含义的标识符是未定义的行为吗