CMake中include的使用

article/2025/9/16 23:59:46

      CMake中的include命令用于从文件或模块(file or module)加载并运行CMake code。其格式如下:

include(<file|module> [OPTIONAL] [RESULT_VARIABLE <var>][NO_POLICY_SCOPE])

      从给定的文件加载并运行CMake code。变量读写访问调用者的范围(Variable reads and writes access the scope of the caller (dynamic scoping))。
      如果指定了OPTIONAL,即使文件不存在也不会触发error

include(xxxx.cmake OPTIONAL) # xxxx.cmake不存在也不会触发warning或error
include(xxxx.cmake) # xxxx.cmake不存在,会触发error# CMake Error at test_include.cmake:9 (include):#   include could not find requested file: xxxx.cmake

      如果给定了RESULT_VARIABLE,变量<var>将被设置为已包含的完整的文件名,如果没有找到且指定了OPTIONAL则为NOTFOUND。

include(test_project.cmake RESULT_VARIABLE var)
message("var: ${var}") # var: /home/spring/GitHub/Linux_Code_Test/Samples_CMake/messy_usage/test_project.cmakeinclude(xxxx.cmake OPTIONAL RESULT_VARIABLE var) # xxxx.cmake不存在
message("var: ${var}") # var: NOTFOUNDinclude(xxxx.cmake RESULT_VARIABLE var) # xxxx.cmake不存在,触发error# CMake Error at test_include.cmake:20 (include):#   include could not find requested file: xxxx.cmake

      如果指定了module而不是file,则首先在CMAKE_MODULE_PATH中搜索名为<modulename>.cmake的文件,然后在CMake module目录(如/usr/share/cmake-3.22/Modules/)中搜索。有一个例外,如果调用include命令的文件本身位于CMake内置模块目录(builtin module directory)中,则首先搜索CMake内置模块目录,然后搜索CMAKE_MODULE_PATH。

include(FindCUDA) # 在/usr/share/cmake-3.22/Modules/目录下查找到message("cmake module path: ${CMAKE_MODULE_PATH}") # cmake module path:
include(FindCUDA OPTIONAL RESULT_VARIABLE var)
message("var: ${var}") # var: /usr/share/cmake-3.22/Modules/FindCUDA.cmake# 下载opencv 4.6.0并将其解压缩到/opt/opencv-4.6.0目录下
set(CMAKE_MODULE_PATH /opt/opencv-4.6.0/cmake)
message("cmake module path: ${CMAKE_MODULE_PATH}") # cmake module path: /opt/opencv-4.6.0/cmake
include(FindCUDA OPTIONAL RESULT_VARIABLE var)
message("var: ${var}") # var: /opt/opencv-4.6.0/cmake/FindCUDA.cmake

      如果include命令读取的文件包含对cmake_policy命令的使用,则默认情况下该policy的设置不会影响调用者,可通过include命令中可选的NO_POLICY_SCOPE关键字来控制此行为

cmake_policy(GET CMP0065 var) # 3.4
message("var: ${var}") # var: NEW# 临时调整test_cmake_policy.cmake中的第3测试段,使其显示设置CMP0065为OLD
include(test_cmake_policy.cmake) # 不带NO_POLICY_SCOPE,在test_cmake_policy.cmake中对CMP0065设置为OLD时,在test_include.cmake中不起作用cmake_policy(GET CMP0065 var) # 3.4
message("var: ${var}") # var: NEW# 临时调整test_cmake_policy.cmake中的第3测试段,使其显示设置CMP0065为OLD
include(test_cmake_policy.cmake NO_POLICY_SCOPE) # 带NO_POLICY_SCOPE后,在test_cmake_policy.cmake中对CMP0065设置为OLD时,在test_include.cmake中也生效cmake_policy(GET CMP0065 var) # 3.4
message("var: ${var}") # var: OLD

       执行上述测试代码需要3个文件:build.sh, CMakeLists.txt, test_include.cmake

      build.sh内容如下:

#! /bin/bash# supported input parameters(cmake commands)
params=(function macro cmake_parse_arguments \find_library find_path find_file find_program find_package \cmake_policy cmake_minimum_required project include \string)usage()
{echo "Error: $0 needs to have an input parameter"echo "supported input parameters:"for param in ${params[@]}; doecho "  $0 ${param}"doneexit -1
}if [ $# != 1 ]; thenusage
fiflag=0
for param in ${params[@]}; doif [ $1 == ${param} ]; thenflag=1breakfi
doneif [ ${flag} == 0 ]; thenecho "Error: parameter \"$1\" is not supported"usageexit -1
fiif [[ ! -d "build" ]]; thenmkdir buildcd build
elsecd build
fiecho "==== test $1 ===="
cmake -DTEST_CMAKE_FEATURE=$1 ..

      CMakeLists.txt内容如下:

cmake_minimum_required(VERSION 3.22)
project(cmake_feature_usage)message("#### current cmake version: ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION}")
include(test_${TEST_CMAKE_FEATURE}.cmake)
message("==== test finish ====")

      test_include.cmake:为上面的所有示例代码

      可能的执行结果如下图所示:

      GitHub: https://github.com/fengbingchun/Linux_Code_Test


http://chatgpt.dhexx.cn/article/vsaJeVri.shtml

相关文章

Makefile基础教学(include的使用方法)

文章目录 前言一、include在makefile中的概念介绍二、include使用示例三、include中需要注意的一些操作1. 在include前加-选项2. include触发规则创建了文件会发生什么3. include包含的文件夹存在 总结 前言 本篇文章将讲解include的使用方法&#xff0c;在C语言中使用include…

django urls include用法

在Django框架中&#xff0c;提供了非常清晰简洁的url管理方法&#xff0c;在新建一个project之后(此处为myproject),然后在项目中建立一个app(此处为myapp)&#xff0c;会看到有如下的目录结构&#xff1a; 一般所熟知的就是在myproject/myproject/urls.py中的urlpatterns列表中…

#include的使用方法

include的作用&#xff1a; #include叫做“文件包含” / include 语句包含并运行指定文件。 功能&#xff1a;它的功能是用来指定文件的全部内容替换程序中的命令行&#xff0c;从而使指定的文件与当前源文件连成一个源文件 书写格式&#xff1a; #include <文件名> …

移位密码及其python实现

就当为CSDN这方面的python开源做点贡献哈哈哈 移位密码 算法原理 ​ python代码 #移位密码 class ShiftCipher:global dddict(zip(.join(chr(i) for i in range(97,123)),list(range(0,26))))#字母表def __init__(self,k:int):self.kk;#k为移位数def encrypt(self,m:str):#加…

python编写移位密码实现加密与解密

python编写移位密码实现加密与解密 移位密码 参考代码&#xff0c;通过列表和ASCII实现&#xff1a; def encrypt(s,key):l list(s);l1 list();for i in l:if i.isalpha():k (ord(i) - 97 key) % 26 97;l1.append(chr(k));else:l1.append(i);s1 .join(l1)print(encrypte…

C++移位密码

C移位密码 这里/**移位密码*/ #include C移位密码欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建…

CTF-密码学-位移密码

题目&#xff1a;位移密码 一步之遥 读题&#xff1a;小明说b3W6f3FzOHKkZ3KiN{B5NkSmZXJ5[ERxNUZ5Z3ZyZ{Gn[kWigR>> 说完&#xff0c;然后他就以64m每秒的速度溜了。 flag格式为SeBaFi{xxx} 审题&#xff1a;考察移位密码&#xff0c;题目提示64m/s的速度&#xff0c;联…

简单密码位移

好久不见啊~~~最近事比较多&#xff0c;所以小生啊&#xff0c;大概是变的懒了&#xff0c;不说废话啦 今天小生和大家分享一下 Java 编写 简单密码位移&#xff0c; 一、要求 二、基本实现功能 三、源代码 已分享至百度云盘&#xff0c;微信回复&#xff1a; 02 &#xff0…

CTF古典密码:移位密码

CTF古典密码&#xff1a;移位密码 文章目录 CTF古典密码&#xff1a;移位密码前言简单例子曲路密码栅栏密码云影密码总结 前言 密码和编码都是加密&#xff0c;但是有着本质区别&#xff1a;那个密码比编码多一个密钥&#xff08;key&#xff09;。这里的密码&#xff0c;不是…

位移密码加密、解密matlab实现

密码学&#xff1a;位移密码加密、解密matlab实现 一、matlab实现&#xff1a;自定义函数 function texttrans_cipher(strText,operation,key) %%% 对明&#xff08;密&#xff09;文采用位移密码进行加&#xff08;解&#xff09;密&#xff1b; %%% 明文&#xff08;密…

初学加密算法之移位密码

移位密码的加密方法很简单&#xff0c;就是将明文按照某种方式进行移位&#xff0c;著名的凯撒密码就是移位密码的一种。 比如‘’i am nine‘’后移3位后的密文就是 l dp qlqh 按照这种思想我设计了一段程序来实现移位加密&#xff1a; #include<stdio.h> #include&l…

【经典密码】移位密码和代换密码的实现

1&#xff0c;移位密码 先读取输入 K&#xff0c;表示移位密码的参数。然后读取输入的一个只含小写字母的字符串。要求你输出该字符串经过 K 位加密之后的加密串&#xff0c;其中串的长度在 100 以内&#xff0c;0<K<25 #include<bits/stdc.h> using namespace st…

信息安全——移位密码算法(C++实现)

信息安全导论课程学习的实验一&#xff0c;移位密码算法C的实现。 移位密码算法是较为简单的算法&#xff0c;只是简单的对明文进行指定位数的移位操作&#xff0c;C语言实现也较为简单&#xff0c;不需要过多赘述。 以下简单介绍了以下移位密码算法的原理&#xff1a; 【原理…

linux常用命令学习总结(超详细)

作为一个程序员&#xff0c;我们在进行项目部署和运维时&#xff0c;经常会用到一些linux命令&#xff0c;可是这些命令老是忘记&#xff0c;每次用到的时候都要去谷歌百度&#xff0c;很是麻烦&#xff01;这不&#xff0c;为了自己使用方便&#xff0c;对常见的linux命令进行…

批处理命令之find 和findstr

find 作用&#xff1a;从文件中收索字符串 格式&#xff1a;find 参数 "字符串" 路径\文件名 参数&#xff1a; /V 显示所有未包含指定字符串的行。 /C 仅显示包含字符串的行数。 /N 显示行号。 /I 搜索字符串时忽略大小写。 /OFF[LINE] 不要跳过具有脱机属性集…

pygame安装教程(python)

1&#xff0c;安装好python。 2&#xff0c;打开cmd 3&#xff0c;输入&#xff1a;pip --version 如果显示未安装pip&#xff0c;那么输入pip。 等待安装完毕。 检查pip是否安装&#xff1a;pip --version 4&#xff0c;输入&#xff1a;pip install pygame 可能会出现这种错…

pygame安装教程(window)

来自一个初学者的疯狂吐槽&#xff0c;最近在学python设计游戏&#xff0c;要安装pygame。这他娘的&#xff0c;安装一个这个&#xff0c;能把刘某人老命要了&#xff0c;各种资源以及资料&#xff0c;各种尝试&#xff0c;各种装不上&#xff0c;各种错误&#xff0c;各种乱七…

Windows Pygame 安装教程 (自己识别版本号并下载)

最近在自学python&#xff0c;准备写个小项目&#xff0c;这个项目需要安装pygame&#xff0c;书中有给出了两个下载链接&#xff1a;https://bitbucket.org/pygame/pygame/downloads/和http://www.lfd.uci.edu/~gohlke/pythonlibs/#pygame。 自己也尝试下载了两个版本可是提示…

Python之pygame安装教程

首先把Python进行安装好。配置两个环境变量: 在系统变量中找到path&#xff0c;加入Python和pip的安装目录。打开cmd&#xff0c;输入Python&#xff0c;检查Python是否配置成功&#xff0c;如跟图1一样说明配置成功。关闭cmd&#xff0c;重新打开&#xff0c;键入pip&#xff…

python-pygame安装教程

网上有很多关于python&#xff0c;pygame的安装教程。大都比较麻烦&#xff0c;下面为大家介绍一种非常简单的安装方法。&#xff08;因为安装大都是新手教程写详细一些&#xff09; python是32位 python是3.6 1 pip配置 安装好python后&#xff0c;配置环境变量。 安装pygame需…