CMake常见语法学习笔记
1.list函数
| 语法 | 描述 |
|---|---|
list(LENGTH <list><output variable>) |
返回list的长度 |
list(GET <list> <elementindex> [<element index> ...]<output variable>) |
返回list中index的element到value中 |
list(APPEND <list><element> [<element> ...]) |
添加新element到list中 |
list(INSERT <list><element_index> <element> [<element> ...]) |
将新element插入到list中index的位置 |
ist(REMOVE_ITEM <list> <value>[<value> ...]) |
从list中删除某个element |
ist(REMOVE_AT <list><index> [<index> ...]) |
从list中删除指定index的element |
list(REMOVE_DUPLICATES <list>) |
从list中删除重复的element |
list(REVERSE <list>) |
将list的内容反转 |
list(SORT <list>) |
将list按字母顺序排序 |
2.string函数
| 语法 | 描述 |
|---|---|
string(FIND <string> <substring> <output_variable> [REVERSE]) |
从string中查找子串substring返回子串在string中的位置,如果提供了REVERSE标记,则从string的末尾开始查找,如果没有找到则返回 -1 |
string(REPLACE <match_string> <replace_string> <output_variable> <input> [<input>...]) |
从input中查找子串match_string替换成replace_string,并输出给output_variable |
string(TOLOWER <string> <output_variable>) |
将string转换成小写形式 |
string(TOUPPER <string> <output_variable>) |
将string转换成大写形式 |
string(LENGTH <string> <output_variable>) |
获取string的长度,输出给output_variable |
string(SUBSTRING <string> <begin> <length> <output_variable>) |
从string中截取begin到begin+length的子字符串,并输出给output_variable |
string(STRIP <string> <output_variable>) |
去除两端空白,并输出给output_variable |
string(REPEAT <string> <count> <output_variable>) |
将string 重复count次,并输出给output_variable |
string(COMPARE LESS <string1> <string2> <output_variable>) |
比较string1和string2,看string1是否小于string2,返回true/false给output_variable |
string(COMPARE GREATER <string1> <string2> <output_variable>) |
比较string1和string2,看string1是否大于string2,返回true/false给output_variable |
string(COMPARE EQUAL <string1> <string2> <output_variable>) |
比较string1和string2,看string1是否等于string2,返回true/false给output_variable |
string(COMPARE NOTEQUAL <string1> <string2> <output_variable>) |
比较string1和string2,看string1是否不等于string2,返回true/false给output_variable |
string(COMPARE LESS_EQUAL <string1> <string2> <output_variable>) |
比较string1和string2,看string1是否小于等于string2,返回true/false给output_variable |
string(COMPARE GREATER_EQUAL <string1> <string2> <output_variable>) |
比较string1和string2,看string1是否大于等于string2,返回true/false给output_variable |
3.CMAKE_BUILD_TYPE
3.1 类型介绍
- (1) Debug:用于在没有优化的情况下,使用带有调试符号构建库或可执行文件;
- (2) Release:用于构建的优化的库或可执行文件,不包含调试符号;
- (3) RelWithDebInfo:用于构建较少的优化库或可执行文件,包含调试符号;
- (4) MinSizeRel:用于不增加目标代码大小的优化方式,来构建库或可执行文件;
3.2 CMakeLists.txt中指定
1 | cmake_minimum_required(VERSION 3.1) |
3.3 构建过程中指定
1 | # (a) 直接指定CMAKE_BUILD_TYPE:对于visual studio项目而言,打开后默认还是Debug; |
4.fPIC选项指定
- (1) 构建过程中指定:
1 | >> cmake -DCMAKE_CXX_FLAGS=-fPIC .. |
- (2) CMakeLists.txt文件中指定
1 | # 1.设置flags |
5.add_library
| 语法 | 描述 |
|---|---|
| `add_library( |
SHARED |
add_library(<name> OBJECT <src>...) |
将源文件编译为 Object,但不链接,通常用于模块化增量编译,将每个模块都编译成一个个 Object,加快库编译效率; |
add_library(<name> ALIAS <target>) |
给 target库取一个别名 name,后续可用 name指代 target库 |
add_library(<name> INTERFACE [IMPORTED [GLOBAL]]) |
这类库有属性,能 install, export和imported,但可能没有 build过程,像 纯头文件库和 完全针对target的设计 |
例如:
1 | # 1.动态库 |
6.add_executable
- 使用特定源文件给项目添加一个可执行文件
| 语法 | 描述 |
|---|---|
add_executable(<name> <options>... <sources>...) |
使用 sources给项目添加一个名为 name的可执行文件,和 add_library一样,源文件可以当前不指定,后续通过 add_sources来进行添加 |
add_executable(<name> IMPORTED [GLOBAL]) |
向项目导入一个可执行文件,[GLOBAL]设置是否全局可见,同样的,一般需要配合 IMPORT_LOCATION[_CONFIG]指定导入可执行文件路径进行使用 |
add_executable(<name> ALIAS <target>) |
给可执行文件 target创建一个别名 name,注意,name需要是没有出现过的名字 |
7.参考资料
- [1] cmake-doc
- [2] cmake : add_library详解