引言
提供的 api 时候需要根据不同的场景,制定不同的导出策略也就是函数的可见性。cmake 实现起来也十分简单。
再探 utils
我们看下 utils 的头文件:
1 |
|
这里只声明了一个函数,现在我们需要根据不同的场合配置 add 函数的可见性。我们创建另外一个头文件 api.h 并定义以下宏:
1 |
然后在我们的 utils.h 头文件中引入该头文件:
1 |
|
其中为 add 函数添加 API 宏,然后我们添加另一个内联函数 add_online,该函数只是为了概述一下内联函数的用法,也就是说在头文件里内联函数必须要声明为 static 的,一是为了防止函数重复定义,一是如果不声明为 static,utils.c 就必须再声明一次该函数,同时必须去掉 inline 关键字。否则会提示找不到符号。回归正题,我们需要在根路径中的 CMakeLists.txt 文件中添加 API 宏的导出策略:
1 | target_compile_definitions(utils-share PUBLIC -DAPI=DEFAULT) |
我们可以通过配置 -DAPI=DEFAULT 或者 -DAPI=HIDDEN 以决定不同的导出策略。当然,该功能只限定于动态库,静态库直接编译到源码中,所以制定导出策略也没有太大的意义。