在cmake中,同时生成静态库与动态库的时候,需要一些技巧,因为cmake中不能生成同名的静态库和动态库,只能先生成不同名的库之后再把其中一个库的名字改名。
# 生成动态库目标
add_library(MathFunctions SHARED ${srcs})
# 生成静态库目标
add_library(MathFunctions_static STATIC ${srcs})
# 指定静态库的输出名称
set_target_properties(MathFunctions_static PROPERTIES OUTPUT_NAME "MathFunctions")
# 使动态库和静态库同时存在
set_target_properties(MathFunctions PROPERTIES CLEAN_DIRECT_OUTPUT 1)
set_target_properties(MathFunctions_static PROPERTIES CLEAN_DIRECT_OUTPUT 1)
# 指定动态库版本
# VERSION 动态库版本
# SOVERSION API版本
set_target_properties(person PROPERTIES VERSION 1.0 SOVERSION 1)
# 将动态库与动态库同时安装到lib目录中
install (TARGETS MathFunctions MathFunctions_static DESTINATION lib)
运行效果:
-rw-r--r-- 1 laolang users 5608 10月 12 02:25 MathFunctions.a
lrwxrwxrwx 1 laolang users 14 10月 12 02:25 MathFunctions.so -> MathFunctions.so.1
lrwxrwxrwx 1 laolang users 16 10月 12 02:25 MathFunctions.so.1 -> MathFunctions.so.1.0
-rwxr-xr-x 1 laolang users 10688 10月 12 02:25 MathFunctions.so.1.0
下面将完整的cmake教程工程链接如下:
在cmake环境下可以直接编译,方便学习
https://download.csdn.net/download/andylauren/11583174