cmake string的所有用法, 并给出示例

时间: 2023-05-30 20:07:52 浏览: 28
CMake中的string命令用于操作字符串,其语法为: ``` string(<COMMAND> [args...]) ``` 其中,`<COMMAND>`表示要执行的操作,`[args...]`则表示操作所需的参数。 下面是string命令的所有用法及示例: 1. `LENGTH`:返回字符串的长度 ``` string(LENGTH "hello world" my_length) message("Length of string is ${my_length}") ``` 输出: ``` Length of string is 11 ``` 2. `SUBSTRING`:截取子字符串 ``` string(SUBSTRING "hello world" 0 5 my_substring) message("Substring is ${my_substring}") ``` 输出: ``` Substring is hello ``` 3. `REPLACE`:替换字符串中的子字符串 ``` string(REPLACE "world" "CMake" my_replaced_string "hello world") message("Replaced string is ${my_replaced_string}") ``` 输出: ``` Replaced string is hello CMake ``` 4. `FIND`:查找字符串中的子字符串 ``` string(FIND "hello world" "world" my_position) message("Position of substring is ${my_position}") ``` 输出: ``` Position of substring is 6 ``` 5. `TOLOWER`:将字符串转换为小写 ``` string(TOLOWER "HeLLo WoRLd" my_lowercase_string) message("Lowercase string is ${my_lowercase_string}") ``` 输出: ``` Lowercase string is hello world ``` 6. `TOUPPER`:将字符串转换为大写 ``` string(TOUPPER "HeLLo WoRLd" my_uppercase_string) message("Uppercase string is ${my_uppercase_string}") ``` 输出: ``` Uppercase string is HELLO WORLD ``` 7. `COMPARE`:比较两个字符串 ``` string(COMPARE EQUAL "hello" "hello" my_equal) message("Strings are equal: ${my_equal}") string(COMPARE EQUAL "hello" "world" my_equal) message("Strings are equal: ${my_equal}") ``` 输出: ``` Strings are equal: TRUE Strings are equal: FALSE ``` 8. `MATCH`:匹配正则表达式 ``` string(MATCH "hello" "hello world" my_match) message("Matched string is ${my_match}") ``` 输出: ``` Matched string is hello ``` 9. `REGEX`:正则表达式替换 ``` string(REGEX REPLACE "world" "CMake" my_replaced_string "hello world") message("Replaced string is ${my_replaced_string}") ``` 输出: ``` Replaced string is hello CMake ``` 10. `ASCII`:获取字符的ASCII码值 ``` string(ASCII "a" my_ascii_value) message("ASCII value is ${my_ascii_value}") ``` 输出: ``` ASCII value is 97 ``` 11. `CONFIGURE`:在字符串中进行配置 ``` set(my_string "Hello ${CMAKE_PROJECT_NAME}!") string(CONFIGURE "${my_string}" my_configured_string) message("Configured string is ${my_configured_string}") ``` 输出: ``` Configured string is Hello <project-name>! ``` 其中,`<project-name>`会被替换为实际的项目名称。

相关推荐

CMake中的string命令用于处理字符串变量。以下是string命令的所有用法: 1. string(ASCII <value>...) 将给定的ASCII值转换为相应的字符并将其存储在变量中。 2. string(CONFIGURE <output-variable> <input> ...) 使用类似C语言的预处理器语法将输入字符串中的变量替换为相应的值,并将结果存储在输出变量中。 3. string(CONCAT <output-variable> <input>...) 将多个输入字符串连接成一个字符串,并将结果存储在输出变量中。 4. string(FIND <input> <substring> <output-variable> [<start>]) 查找子字符串在输入字符串中的位置,并将结果存储在输出变量中。可选地可以指定搜索开始位置。 5. string(JOIN <glue> <output-variable> <input>...) 将输入字符串列表连接成一个字符串,并在每个字符串之间插入指定的粘合剂字符串,并将结果存储在输出变量中。 6. string(MAKE_C_IDENTIFIER <input> <output-variable>) 将输入字符串转换为C语言标识符,并将结果存储在输出变量中。 7. string(MD5 <input> <output-variable>) 计算给定字符串的MD5哈希值,并将结果存储在输出变量中。 8. string(PREPEND <output-variable> <input>...) 将多个输入字符串连接到现有字符串的前面,并将结果存储在输出变量中。 9. string(RANDOM <length> [<alphabet>] [<output-variable>]) 生成一个随机字符串,并将结果存储在输出变量中。可选地可以指定字符串的长度和字符集。 10. string(REPLACE <match> <replace> <output-variable> <input>...) 将输入字符串中所有匹配的子字符串替换为指定的替换字符串,并将结果存储在输出变量中。 11. string(SHA1 <input> <output-variable>) 计算给定字符串的SHA1哈希值,并将结果存储在输出变量中。 12. string(SHA224 <input> <output-variable>) 计算给定字符串的SHA224哈希值,并将结果存储在输出变量中。 13. string(SHA256 <input> <output-variable>) 计算给定字符串的SHA256哈希值,并将结果存储在输出变量中。 14. string(SHA384 <input> <output-variable>) 计算给定字符串的SHA384哈希值,并将结果存储在输出变量中。 15. string(SHA512 <input> <output-variable>) 计算给定字符串的SHA512哈希值,并将结果存储在输出变量中。 16. string(SUBSTRING <output-variable> <input> <start> <length>) 从输入字符串中提取子字符串,并将结果存储在输出变量中。可选地可以指定子字符串的起始位置和长度。 17. string(TOLOWER <output-variable> <input>) 将输入字符串转换为小写,并将结果存储在输出变量中。 18. string(TOUPPER <output-variable> <input>) 将输入字符串转换为大写,并将结果存储在输出变量中。 以上就是CMake中string命令的所有用法。
下面是一个简单的示例,演示如何使用 CMake、find_package、install 和 CPack 工具来构建、打包和安装一个简单的 C++ 应用程序。 假设我们有一个名为 "hello" 的 C++ 应用程序,它依赖于 Boost 库和 OpenSSL 库。我们的目标是在 Linux 系统上构建、打包和安装这个应用程序。 1. 安装 Boost 和 OpenSSL 库: sudo apt-get install libboost-all-dev libssl-dev 2. 创建一个名为 CMakeLists.txt 的文件,描述构建过程: cmake_minimum_required(VERSION 3.10) project(hello) # 查找 Boost 库 find_package(Boost REQUIRED COMPONENTS system) # 查找 OpenSSL 库 find_package(OpenSSL REQUIRED) # 添加可执行文件 add_executable(hello main.cpp) # 链接 Boost 和 OpenSSL 库 target_link_libraries(hello Boost::system OpenSSL::SSL OpenSSL::Crypto) # 安装可执行文件到 /usr/local/bin 目录下 install(TARGETS hello DESTINATION /usr/local/bin) # 使用 CPack 工具生成 DEB 软件包 set(CPACK_GENERATOR "DEB") set(CPACK_PACKAGE_NAME "hello") set(CPACK_PACKAGE_VERSION "1.0") set(CPACK_PACKAGE_DESCRIPTION "A simple hello world program") include(CPack) 3. 创建一个名为 main.cpp 的文件,作为应用程序的源代码: #include <iostream> #include <boost/asio.hpp> #include <openssl/ssl.h> int main() { std::cout << "Hello, world!" << std::endl; std::cout << "Boost version: " << BOOST_LIB_VERSION << std::endl; std::cout << "OpenSSL version: " << SSLeay_version(SSLEAY_VERSION) << std::endl; return 0; } 4. 在项目根目录下创建一个名为 build 的文件夹,并进入该文件夹: mkdir build cd build 5. 运行 CMake 命令来生成构建文件: cmake .. 6. 运行 make 命令来构建应用程序: make 7. 运行 make install 命令来安装应用程序: sudo make install 8. 运行 CPack 命令来生成软件包: cpack 9. 在 build 目录下可以找到生成的软件包,例如 hello-1.0-Linux.deb。 这样,我们就成功地使用 CMake、find_package、install 和 CPack 工具来构建、打包和安装一个简单的 C++ 应用程序。
CMake 的 config 命令可以用于生成 CMake 配置文件,该配置文件可以用于帮助其他项目查找并链接到当前项目。 以下是 config 命令的常用用法: 1. config 命令的基本用法: configure_file(input_file output_file [COPYONLY]) 该命令将读取 input_file 文件的内容,并将其中的变量替换为 CMake 的变量,然后将结果写入 output_file 文件。如果指定了 COPYONLY 参数,则只会将文件复制到输出目录,而不进行变量替换。 2. config 命令中的变量替换: 在 config 命令中,可以使用 ${VAR} 的形式来引用 CMake 中的变量,例如: configure_file(input_file output_file @ONLY) 在上面的例子中,@ONLY 参数表示只替换 ${VAR} 形式的变量,而不替换其它形式的变量。 3. config 命令中的路径替换: 在 config 命令中,可以使用 ${VAR} 的形式来引用 CMake 中的变量,并使用 PATH 选项将其转换为绝对路径形式,例如: configure_file(input_file output_file @ONLY PATH_VARS VAR) 在上面的例子中,PATH_VARS 参数表示将 ${VAR} 形式的变量转换为绝对路径形式。 4. config 命令中的自定义标记: 在 config 命令中,可以使用自定义的标记来指定需要进行替换的内容,例如: configure_file(input_file output_file @ONLY ESCAPE_QUOTES) 在上面的例子中,ESCAPE_QUOTES 表示需要对引号进行转义。 5. config 命令中的条件语句: 在 config 命令中,可以使用条件语句来根据不同的条件生成不同的配置文件,例如: if (UNIX) configure_file(input_file_unix output_file @ONLY) else() configure_file(input_file_win output_file @ONLY) endif() 在上面的例子中,如果当前平台是 UNIX,则使用 input_file_unix 文件生成 output_file 文件,否则使用 input_file_win 文件生成 output_file 文件。 6. config 命令中的选项: config 命令还支持许多其他选项,例如 NEWLINE_STYLE 可以指定换行符的风格,COPYONLY 可以只复制文件而不替换其中的变量等等。具体的选项可以参考 CMake 的官方文档。 以上是 config 命令的常用用法,具体选项和用法可以参考 CMake 的官方文档。

最新推荐

CMake-Cookbook-2018.pdf

Building, testing, and packaging modular software with modern CMake

VScode中使用Cmake遇到的问题及其解决方法(推荐)

主要介绍了VScode中使用Cmake遇到的问题及其解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

VS2019中CMake项目的简单使用方法

主要介绍了VS2019中CMake项目的简单使用方法,需要的朋友可以参考下

(cmake最全的书)cmake.pdf

cmake大全,详细介绍了cmake的安装、配置、使用;可谓是不可多得好书,网上很多只介绍了一部分,这本书从基础到高级,都有介绍

CMake_Practice(带书签版本).pdf

根据CMake_Practice的原文进行整理的书签,并对原文中一些错字进行了修改,方便后期阅读。在Linux下进行C++开发必备参考资料

数据结构1800试题.pdf

你还在苦苦寻找数据结构的题目吗?这里刚刚上传了一份数据结构共1800道试题,轻松解决期末挂科的难题。不信?你下载看看,这里是纯题目,你下载了再来私信我答案。按数据结构教材分章节,每一章节都有选择题、或有判断题、填空题、算法设计题及应用题,题型丰富多样,共五种类型题目。本学期已过去一半,相信你数据结构叶已经学得差不多了,是时候拿题来练练手了,如果你考研,更需要这份1800道题来巩固自己的基础及攻克重点难点。现在下载,不早不晚,越往后拖,越到后面,你身边的人就越卷,甚至卷得达到你无法想象的程度。我也是曾经遇到过这样的人,学习,练题,就要趁现在,不然到时你都不知道要刷数据结构题好还是高数、工数、大英,或是算法题?学完理论要及时巩固知识内容才是王道!记住!!!下载了来要答案(v:zywcv1220)。

特邀编辑特刊:安全可信计算

10特刊客座编辑安全和可信任计算0OZGUR SINANOGLU,阿布扎比纽约大学,阿联酋 RAMESHKARRI,纽约大学,纽约0人们越来越关注支撑现代社会所有信息系统的硬件的可信任性和可靠性。对于包括金融、医疗、交通和能源在内的所有关键基础设施,可信任和可靠的半导体供应链、硬件组件和平台至关重要。传统上,保护所有关键基础设施的信息系统,特别是确保信息的真实性、完整性和机密性,是使用在被认为是可信任和可靠的硬件平台上运行的软件实现的安全协议。0然而,这一假设不再成立;越来越多的攻击是0有关硬件可信任根的报告正在https://isis.poly.edu/esc/2014/index.html上进行。自2008年以来,纽约大学一直组织年度嵌入式安全挑战赛(ESC)以展示基于硬件的攻击对信息系统的容易性和可行性。作为这一年度活动的一部分,ESC2014要求硬件安全和新兴技术�

如何查看mysql版本

### 回答1: 可以通过以下两种方式来查看MySQL版本: 1. 通过命令行方式: 打开终端,输入以下命令: ``` mysql -V ``` 回车后,会显示MySQL版本信息。 2. 通过MySQL客户端方式: 登录到MySQL客户端,输入以下命令: ``` SELECT VERSION(); ``` 回车后,会显示MySQL版本信息。 ### 回答2: 要查看MySQL的版本,可以通过以下几种方法: 1. 使用MySQL命令行客户端:打开命令行终端,输入mysql -V命令,回车后会显示MySQL的版本信息。 2. 使用MySQL Workbench:打开MyS

TFT屏幕-ILI9486数据手册带命令标签版.pdf

ILI9486手册 官方手册 ILI9486 is a 262,144-color single-chip SoC driver for a-Si TFT liquid crystal display with resolution of 320RGBx480 dots, comprising a 960-channel source driver, a 480-channel gate driver, 345,600bytes GRAM for graphic data of 320RGBx480 dots, and power supply circuit. The ILI9486 supports parallel CPU 8-/9-/16-/18-bit data bus interface and 3-/4-line serial peripheral interfaces (SPI). The ILI9486 is also compliant with RGB (16-/18-bit) data bus for video image display. For high speed serial interface, the ILI9486 also provides one data and clock lane and supports up to 500Mbps on MIPI DSI link. And also support MDDI interface.

特邀编辑导言:片上学习的硬件与算法

300主编介绍:芯片上学习的硬件和算法0YU CAO,亚利桑那州立大学XINLI,卡内基梅隆大学TAEMINKIM,英特尔SUYOG GUPTA,谷歌0近年来,机器学习和神经计算算法取得了重大进展,在各种任务中实现了接近甚至优于人类水平的准确率,如基于图像的搜索、多类别分类和场景分析。然而,大多数方法在很大程度上依赖于大型数据集的可用性和耗时的离线训练以生成准确的模型,这在许多处理大规模和流式数据的应用中是主要限制因素,如工业互联网、自动驾驶车辆和个性化医疗分析。此外,这些智能算法的计算复杂性仍然对最先进的计算平台构成挑战,特别是当所需的应用受到功耗低、吞吐量高、延迟小等要求的严格限制时。由于高容量、高维度和高速度数据,最近传感器技术的进步进一步加剧了这种情况。0在严格的条件下支持芯片上学习和分类的挑战0性�