CMakeLists.txt语法规则:部分常用命令说明三

2024-05-06 08:04

本文主要是介绍CMakeLists.txt语法规则:部分常用命令说明三,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一.  简介

前面几篇文章学习了CMakeLists.txt语法中 add_executable命令,add_library命令,aux_source_directory命令,include_directories命令,add_subdirectory 命令的简单使用。文章如下:

CMakeLists.txt语法规则:部分常用命令说明一-CSDN博客

CMakeLists.txt语法规则:部分常用命令说明二-CSDN博客

本文继续学习 CMakeLists.txt语法中部分常用命令。

二.  CMakeLists.txt语法规则:部分常用命令

1.  link_directories命令 和 link_libraries 命令

link_directories 命令用于设置库文件的搜索路径,相当于 gcc 编译器的 -L 选项;
link_libraries 命令用于设置需要链接的库文件,相当于 gcc 编译器的 -l 选项;命令定义如下所示:
link_directories(directory1 directory2 ...)
link_libraries([item1 [item2 [...]]][[debug|optimized|general] <item>] ...)
link_directories 会将指定目录添加到 库文件搜索列表 (可以认为每一个 CMakeLists.txt 源码都有自己的库文件搜索列表 中;
同理, link_libraries 命令会将指定库文件添加到链接库列表。 link_directories 命令可 以使用绝对路径或相对路径指定目录,相对路径被解释为当前源码路径的相对路径。
譬如工程目录结构如下所示:
├── build
├── CMakeLists.txt
├── include
│ └── hello.h
├── lib
│ └── libhello.so
└── main.c
lib 目录下有一个动态库文件 libhello.so ,编译链接 main.c 源文件时需要链接 libhello.so CMakeLists.txt 文件内容如下所示:
# 顶层 CMakeLists.txt
cmake_minimum_required("VERSION" "3.5")
project("HELLO")include_directories(include)
link_directories(lib)
link_libraries(hello)
add_executable(main main.c)
库文件名既可以使用简写,也可以库文件名的全称,譬如:
link_libraries(hello)  # 简写link_libraries(libhello.so)  # 全称
link_libraries 命令也可以指定库文件的全路径(绝对路径 /开头),如果不是/开头,link_libraries 会认为调用者传入的是库文件名,而非库文件全路径,譬如上述 CMakeLists.txt 可以修改为下面这种方式:
# 顶层 CMakeLists.txt
cmake_minimum_required("VERSION" "3.5")
project("HELLO")include_directories(include)
link_libraries(${PROJECT_SOURCE_DIR}/lib/libhello.so)
add_executable(main main.c)

include_directories 命令相同,当调用 add_subdirectory 命令加载子源码时,会将link_directories 命令 包含的目录列表以及 link_libraries 命令包含的链接库列表,向下传递给子源码。

2.  list

list 命令是一个关于列表操作的命令,譬如获取列表的长度、从列表中返回由索引值指定的元素、将元素追加到列表中等等。命令定义如下:
list(LENGTH <list> <output variable>)
list(GET <list> <element index> [<element index> ...]<output variable>)
list(APPEND <list> [<element> ...])
list(FIND <list> <value> <output variable>)
list(INSERT <list> <element_index> <element> [<element> ...])
list(REMOVE_ITEM <list> <value> [<value> ...])
list(REMOVE_AT <list> <index> [<index> ...])
list(REMOVE_DUPLICATES <list>)
list(REVERSE <list>)
list(SORT <list>)
列表这个概念还没给大家介绍,列表其实就是字符串数组(或者叫字符串列表、字符串数组),稍后再向大家说明。
LENGTH 选项用于返回列表长度;

GET 选项从列表中返回由索引值指定的元素;

APPEND 选项将元素追加到列表后面;

FIND 选项将返回列表中指定元素的索引值,如果未找到,则返回 -1

INSERT 选项将向列表中的指定位置插入元素。

REMOVE_AT REMOVE_ITEM 选项将从列表中删除元素,不同之处在于 REMOVE_ITEM 将删除给定的元素,而 REMOVE_AT 将删除给定索引值的元素。

REMOVE_DUPLICATES 选项将删除列表中的重复元素。

REVERSE 选项就地反转列表的内容。

SORT 选项按字母顺序对列表进行排序。

下一篇文章继续学习其他的 CMakeLists.txt语法的部分常用命令。

这篇关于CMakeLists.txt语法规则:部分常用命令说明三的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/963832

相关文章

Redis中哨兵机制和集群的区别及说明

《Redis中哨兵机制和集群的区别及说明》Redis哨兵通过主从复制实现高可用,适用于中小规模数据;集群采用分布式分片,支持动态扩展,适合大规模数据,哨兵管理简单但扩展性弱,集群性能更强但架构复杂,根... 目录一、架构设计与节点角色1. 哨兵机制(Sentinel)2. 集群(Cluster)二、数据分片

Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

《Springboot项目构建时各种依赖详细介绍与依赖关系说明详解》SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-w... 目录一、spring-boot-dependencies1.简介2. 内容概览3.核心内容结构4.

Java实现TXT文件导入功能的详细步骤

《Java实现TXT文件导入功能的详细步骤》在实际开发中,很多应用场景需要将用户上传的TXT文件进行解析,并将文件中的数据导入到数据库或其他存储系统中,本文将演示如何用Java实现一个基本的TXT文件... 目录前言1. 项目需求分析2. 示例文件格式3. 实现步骤3.1. 准备数据库(假设使用 mysql

redis和redission分布式锁原理及区别说明

《redis和redission分布式锁原理及区别说明》文章对比了synchronized、乐观锁、Redis分布式锁及Redission锁的原理与区别,指出在集群环境下synchronized失效,... 目录Redis和redission分布式锁原理及区别1、有的同伴想到了synchronized关键字

MySQL 临时表创建与使用详细说明

《MySQL临时表创建与使用详细说明》MySQL临时表是存储在内存或磁盘的临时数据表,会话结束时自动销毁,适合存储中间计算结果或临时数据集,其名称以#开头(如#TempTable),本文给大家介绍M... 目录mysql 临时表详细说明1.定义2.核心特性3.创建与使用4.典型应用场景5.生命周期管理6.注

Python 函数详解:从基础语法到高级使用技巧

《Python函数详解:从基础语法到高级使用技巧》本文基于实例代码,全面讲解Python函数的定义、参数传递、变量作用域及类型标注等知识点,帮助初学者快速掌握函数的使用技巧,感兴趣的朋友跟随小编一起... 目录一、函数的基本概念与作用二、函数的定义与调用1. 无参函数2. 带参函数3. 带返回值的函数4.

Java中数组与栈和堆之间的关系说明

《Java中数组与栈和堆之间的关系说明》文章讲解了Java数组的初始化方式、内存存储机制、引用传递特性及遍历、排序、拷贝技巧,强调引用数据类型方法调用时形参可能修改实参,但需注意引用指向单一对象的特性... 目录Java中数组与栈和堆的关系遍历数组接下来是一些编程小技巧总结Java中数组与栈和堆的关系关于

批量导入txt数据到的redis过程

《批量导入txt数据到的redis过程》用户通过将Redis命令逐行写入txt文件,利用管道模式运行客户端,成功执行批量删除以Product*匹配的Key操作,提高了数据清理效率... 目录批量导入txt数据到Redisjs把redis命令按一条 一行写到txt中管道命令运行redis客户端成功了批量删除k

C#监听txt文档获取新数据方式

《C#监听txt文档获取新数据方式》文章介绍通过监听txt文件获取最新数据,并实现开机自启动、禁用窗口关闭按钮、阻止Ctrl+C中断及防止程序退出等功能,代码整合于主函数中,供参考学习... 目录前言一、监听txt文档增加数据二、其他功能1. 设置开机自启动2. 禁止控制台窗口关闭按钮3. 阻止Ctrl +

mybatis-plus QueryWrapper中or,and的使用及说明

《mybatis-plusQueryWrapper中or,and的使用及说明》使用MyBatisPlusQueryWrapper时,因同时添加角色权限固定条件和多字段模糊查询导致数据异常展示,排查发... 目录QueryWrapper中or,and使用列表中还要同时模糊查询多个字段经过排查这就导致只要whe