一 基本语法
① 设置目标的属性
set_property(<GLOBAL |
DIRECTORY [dir] |
TARGET [target1 [target2 ...]] |
SOURCE [src1 [src2 ...]] |
TEST [test1 [test2 ...]] |
CACHE [entry1 [entry2 ...]]>
[APPEND][APPEND_STRING]
PROPERTY <name>[value1 [value2 ...]])
② 获取属性值
get_property: '获取'一个属性值
get_property(<variable>
<GLOBAL |
DIRECTORY [dir] |
TARGET <target> |
SOURCE <source> |
TEST <test> |
CACHE <entry> |
VARIABLE>
PROPERTY <name>
[SET | DEFINED |BRIEF_DOCS | FULL_DOCS])
二 实践
① 项目初始化
1) '新建'一个项目目录-->'LibraryProperty'-->'cd进入'
2) 创建'src'子目录用于'保存'源文件
3) 创建'build'子目录用于'外部编译'
4) 编写'项目根目录'下'CMakeLists.txt'文件
② 编写根目录的CMakeLists.txt文件
③ src子目录添加要生成库的头文件和源文件
④ 编写src子目录下的CMakeLists.txt文件
⑤ 报错1
原因: 不能有'相同名称'的目标 -->'特制前缀'
疑惑: 理论上一个为'.so'结尾、一个为'.a'结尾的?
⑥ 如何解决上面的报错
方式1: '随便'修改其中一个'库'的名称 --> '不再演示'
场景: 如果想让'静态库'和'动态库'同一前缀呢?
备注: 20行'修改'为--> message(STATUS "UNDEFINE_NAME = ${UNDEFINE_VALUE}")
体会: '语法格式'
⑦ 继续测试
⑧ 动态库的其它属性设置
效果: 动态库带'有版本号',并且有两个'链接文件'
1)带有'VERSION'的库
2)带有'SOVERSION'的库
⑨ 继续修改
⑩ 测试
备注: '库'被成功安装到'指定目录'