库的命名规则

Windows平台

建议参考boost的命名规范

参考文章

  1. Boost官网的《Geting Started On Windows》(http://www.boost.org/doc/libs/1_38_0/more/getting_started/windows.html)提到了Boost库的命名
  2. Boost库命名规则

libboost_regex-vc71-mt-d-1_34.lib 为例

说明
lib 除了Microsoft Windows之外,每一个Boost库的名字都以此字符串开始
- 在Windows上,只有普通的静态库使用lib前缀;
- 导入库和DLL不使用
boost_regex 库名称:所有boost库名文件以boost_开头
-vc71 Toolset 标记:标识了构建该库所用的toolset和版本
-mt Threading 标记:标识构建该库启用了多线程支持。不支持多线程的库没有-mt
-d ABI标记:编码了影响库和其他编译代码交互的细节。对于每一种特性,向标记中添加一个字母:
- s 静态链接到C++标准库和编译器运行时支撑库
- g 使用标准库和运行时支撑库的调试版本
- y 使用Python的特殊调试构建
- d 构建代码的调试版本
- p 使用STLPort标准库而不是编译器提供的默认库
- n 使用STLPort已被弃用的“native iostreams”
-1_34 版本标记:完整的Boost发布号,下划线代替点。例如,1.31.1版本将被标记为“-1_31_1”
.lib 扩展名:取决于操作系统。在大多数unix平台上,.a是静态库,.so是共享库。在Windows上,.dll表示共享库,.lib是静态或导入库。

【其他flag】

MT 多线程连接静态库 链接的库为LIBCMT.lib
ML 单线程连接静态库 链接的库为LIBC.lib
MD 多线程连接动态库 链接的导入库MSVCRT.lib 可使用_MT和_DLL指定此编译参数

MTd MLd MDd 为对应的调试版本

linux平台

一般linux平台编译,它自己会带上版本。所以不用加后缀
target的后缀(库的命名规则) - 图1

cmake给编译结果加后缀

  1. set(CMAKE_DEBUG_POSTFIX "_d") #debug后缀
  2. set(CMAKE_RELEASE_POSTFIX "_r") #release后缀
  3. set_target_properties(${TARGET_NAME} PROPERTIES DEBUG_POSTFIX "_d") set_target_properties(${TARGET_NAME} PROPERTIES RELEASE_POSTFIX "_r")