CMake常用命令(二) project命令

2023-11-12


语法

project(<PROJECT-NAME> [<language-name>...])project(<PROJECT-NAME>
[VERSION <major>[.<minor>[.<patch>[.<tweak>]]]]
[DESCRIPTION <project-description-string>]
[HOMEPAGE_URL <url-string>]
[LANGUAGES <language-name>...])

作用

project命令用于指定cmake工程的名称,实际上,它还可以指定cmake工程的版本号(VERSION关键字)、简短的描述(DESCRIPTION关键字)、主页URL(HOMEPAGE_URL关键字)和编译工程使用的语言(LANGUAGES关键字)。

参数

  1. PROJECT_NAME:将当前工程的名称赋值给PROJECT_NAME,同时${PROJECT_NAME}变量赋值为PROJECT_NAME。
  2. VERSION:指定工程的版本号。
  3. DESCRIPTION:对工程的文本描述。
  4. HOMEPAGE_URL:指定工程的主页URL。
  5. LANGUAGES选项:选择构建工程需要的编程语言。

举例

假设当前系统的cmake版本为3.10.2

示例1 基础用法

project(pro_test)

当定义了project()后,一下cmake自带变量会自动赋值

  1. PROJECT_NAME:将当前工程的名称赋值给PROJECT_NAME,对于本例子,就是${PROJECT_NAME}=mytest。
  2. PROJECT_SOURCE_DIR:当前工程的源码路径。
  3. _SOURCE_DIR:指定工程的源码路径,这个变量和PROJECT_SOURCE_DIR的区别就是,_SOURCE_DIR跟具体的工程名字关联起来,若就是当前工程,则该变量和PROJECT_SOURCE_DIR相等。
  4. PROJECT_BINARY_DIR:当前工程的二进制路径。
  5. _BINARY_DIR:指定工程的二进制路径,这个变量和PROJECT_BINARY_DIR的区别就是,_BINARY_DIR跟具体的工程名字关联起来,若就是当前工程,则该变量和PROJECT_BINARY_DIR相等。
  6. CMAKE_PROJECT_NAME:顶层工程的名称。例如当前调用的CMakeLists.txt位于顶层目录(可以理解为使用cmake命令首次调用的那个CMakeLists.txt),那么工程名还会赋值给CMAKE_PROJECT_NAME。

示例2 VERSION用法

project (mytest VERSION 1.2.3.4)

除示例1 中的变量更改外,还会更改PROJECT_VERSION

示例3 DESCRIPTION用法

project (pro_test DESCRIPTION “This is my test project.)
以下变量会被赋值
**PROJECT_DESCRIPTION
<PROJECT-NAME>_DESCRIPTION
CMAKE_PROJECT_DESCRIPTION**

示例4 HOMEPAGE_URL用法

project (mytest HOMEPAGE_URL “https://www.XXX(示例).com”)
以下变量会被赋值
**PROJECT_HOMEPAGE_URL
<PROJECT-NAME>_HOMEPAGE_URL
CMAKE_PROJECT_HOMEPAGE_URL**

示例4 LANGUAGES用法

该选项可以有两种调用方式:一种是直接跟在工程名后面,可以省略LANGUAGES关键字;另一种是跟在其他关键字(例如VERSION)后面,LANGUAGES关键字不能省略。

project (pro_test “CXX”)

更多细节

  1. project命令并非必不可少,如果没有调用project命令,cmake仍然会生成一个默认的工程名“Project”,以及工程名对应的变量(例如PROJECT_NAME、CMAKE_PROJECT_NAME、PROJECT_SOURCE_DIR、<PROJECT_NAME>_SOURCE_DIR、PROJECT_BINARY_DIR、<PROJECT_NAME>_BINARY_DIR等)。但是VERSION、DESCRIPTION、HOMEPAGE_URL等选项对应的变量不会被赋值(LANGUAGES例外,即使不指定,默认语言为C和CXX)。
  2. project命令需要放置在其他命令调用之前,在cmake_minimum_required(参考https://www.jianshu.com/p/7535bff0e894
    )命令之后。
  3. 如果多次调用project命令,那么CMAKE_PROJECT_NAME、CMAKE_PROJECT_VERSION、CMAKE_PROJECT_DESCRIPTION、CMAKE_PROJECT_HOMEPAGE_URL等变量是以最近一次调用的project命令为准

参考

Cmake命令之project介绍

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CMake常用命令(二) project命令 的相关文章

  • 如何使用 python urllib 在 HTTP/1.1 中保持活力

    现在我正在这样做 Python3 urllib url someurl headers HOST somehost Connection keep alive Accept Encoding gzip deflate opener urll
  • 在 LINQ 查询中返回不带时间的日期

    我正在编写一个查询 我想计算按日期联系我们的呼叫中心的次数 看起来很简单 但由于联系日期字段是日期时间字段 我得到了时间 因此当我按联系日期 时间 分组时 每个联系日期实例的计数为 1 所以 我想只按日期分组 而不按时间分组 下面是我用来查
  • C++:无法使用scoped_allocator_adaptor传播polymorphic_allocator

    我有一个vector
  • FFMPEG Seeking 带来音频伪影

    我正在使用 ffmpeg 实现音频解码器 在读取音频甚至搜索已经可以工作时 我无法找到一种在搜索后清除缓冲区的方法 因此当应用程序在搜索后立即开始读取音频时 我没有任何工件 avcodec flush buffers似乎对内部缓冲区没有任何
  • 为什么禁止在 constexpr 函数中使用 goto?

    C 14 对你能做什么和不能做什么有规则constexpr功能 其中一些 没有asm 没有静态变量 看起来相当合理 但标准也不允许goto in constexpr功能 即使它允许其他控制流机制 这种区别背后的原因是什么 我以为我们已经过去
  • 将字符串从非托管代码传递到托管

    我在将字符串从非托管代码传递到托管代码时遇到问题 在我的非托管类中 非托管类 cpp 我有一个来自托管代码的函数指针 TESTCALLBACK FUNCTION testCbFunc TESTCALLBACK FUNCTION 接受一个字符
  • 使用 C# 在 WinRT 中获取可用磁盘空间

    DllImport kernel32 dll SetLastError true static extern bool GetDiskFreeSpaceEx string lpDirectoryName out ulong lpFreeBy
  • c 中的错误:声明隐藏了全局范围内的变量

    当我尝试编译以下代码时 我收到此错误消息 错误 声明隐藏了全局范围内的变量 无效迭代器 节点 根 我不明白我到底在哪里隐藏或隐藏了之前声明的全局变量 我怎样才能解决这个问题 typedef node typedef struct node
  • 使用向量的 merge_sort 在少于 9 个输入的情况下效果很好

    不知何故 我使用向量实现了合并排序 问题是 它可以在少于 9 个输入的情况下正常工作 但在有 9 个或更多输入的情况下 它会执行一些我不明白的操作 如下所示 Input 5 4 3 2 1 6 5 4 3 2 1 9 8 7 6 5 4 3
  • 初始化变量的不同方式

    在 C 中初始化变量有多种方法 int z 3 与 int 相同z 3 Is int z z 3 same as int z z 3 您可以使用 int z z 3 Or just int z 3 Or int z 3 Or int z i
  • Windows 10 中 Qt 桌面应用程序的缩放不当

    我正在为 Windows 10 编写一个简单的 Qt Widgets Gui 应用程序 我使用的是 Qt 5 6 0 beta 版本 我遇到的问题是它根本无法缩放到我的 Surfacebook 的屏幕上 这有点难以判断 因为 SO 缩放了图
  • 检查 url 是否指向文件或页面

    我们需要以下内容 如果文件确实是文件 则从 URL 下载该文件 否则 如果它是一个页面 则什么也不做 举个简单的例子 我有以下命令来下载文件 My Computer Network DownloadFile http www wired c
  • 将应用程序从 Microsoft Access 迁移到 VB 或 C#.NET

    我目前正试图说服管理层需要将我们的应用程序之一移植到 NET 该应用程序已经发展成为 Access 中的一个庞然大物 SQL 后端 拥有 700 个链接表 650 个表单 子表单 130 个模块和 850 个查询 我几乎知道这样做的所有主要
  • EPPlus Excel 更改单元格颜色

    我正在尝试将给定单元格的颜色设置为另一个单元格的颜色 该单元格已在模板中着色 但worksheet Cells row col Style Fill BackgroundColor似乎没有get财产 是否可以做到这一点 或者我是否必须在互联
  • char指针或char变量的默认值是什么[重复]

    这个问题在这里已经有答案了 下面是我尝试打印 char 变量和指针的默认值 值的代码 但无法在控制台上看到它 它是否有默认值或只是无法读取 ASCII 范围 include
  • 如何构建印度尼西亚电话号码正则表达式

    这些是一些印度尼西亚的电话号码 08xxxxxxxxx 至少包含 11 个字符长度 08xxxxxxxxxxx 始终以 08 开头 我发现这个很有用 Regex regex new Regex 08 0 9 0 9 0 9 0 9 0 9
  • 如何在内存中存储分子?

    我想将分子存储在内存中 这些可以是简单的分子 Methane CH4 C H bond length 108 7 pm H H angle 109 degrees But also more complex molecules like p
  • C++ 成员函数中的“if (!this)”有多糟糕?

    如果我遇到旧代码if this return 在应用程序中 这种风险有多严重 它是一个危险的定时炸弹 需要立即在应用程序范围内进行搜索和销毁工作 还是更像是一种可以悄悄留在原处的代码气味 我不打算writing当然 执行此操作的代码 相反
  • 如何连接字符串和常量字符?

    我需要将 hello world 放入c中 我怎样才能做到这一点 string a hello const char b world const char C string a hello const char b world a b co
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但

随机推荐

  • 大数据工程师面试经验

    全中国的IT公司只想去阿里 因为阿里真的是中国程序员的朝圣地 进去真的能学很多 最终经历了5轮面试 顺利拿到了offer 这里和大家分享一下我的面试经验 一面过程 首先是一次不记名面试 这里我也真的很感谢这场不记名面试了 如果没有这场不记名
  • C++类的拷贝(复制)构造函数深入理解

    目录 一 拷贝构造函数的基本了解和使用 二 拷贝构造函数的一些注意事项 三 拷贝构造函数的调用时机 使用一个对象 直接构造 显式构造 或 初始化 隐式构造 另一个同类对象 关于拷贝构造函数与赋值函数的区别与联系 作为函数的形式参数时 作为函
  • 路由器网口1一直闪烁正常吗_路由器灯怎么闪才正常

    在我们日常生活当中 很多人家里都会安装各种各样的路由器 有的人家中安装的路由器是穿墙路由器 无论是安装的哪种路由器都有可能出现一些故障 今天小编就来跟大家说一说路由器灯怎么闪才正常 希望可以给大家带来帮助 感兴趣的朋友们可以跟随小编一起来了
  • vue3+ts动态写后台管理系统左边的菜单栏

    1 在路由router文件里面写路由元信息传递左侧显示的路由 以及路由的名字 const routes Array
  • Pandas知识点-索引和切片操作

    Pandas知识点 索引和切片操作 索引和切片操作是最基本最常用的数据处理操作 Pandas中的索引和切片操作基于Python的语言特性 支持类似于numpy中的操作 也可以使用行标签 列标签以及行标签与列标签的组合来进行索引和切片操作 本
  • Golang架构直通车——理解defer

    文章目录 defer应用 defer触发时机 defer执行顺序 预计算参数 defer实现原理 defer应用 Go 语言的 defer会在当前函数或者方法返回之前执行传入的函数 它会经常被用于关闭文件描述符 关闭数据库连接以及解锁资源
  • Ubuntu使用splint查找C代码的BUG

    1 安装splint sudo apt get install splint 2 测试代码main c如下 include
  • sEnginScriptError Component is not found in path "components/..."

    小程序开发报错 sEnginScriptError Component is not found in path components cesh using by pages playlist playlist onAppRoute Err
  • 更换JDK版本不生效的问题解决方案

    1 首先检查环境变量是否修改完成 环境变量配置 PATH JAVA HOME bin JAVA HOME C Program Files Java jdk1 8 1 131 选择自己电脑上JDK的安装路径 2 输入 javac 检查JDK是
  • 力扣1342. 将数字变成 0 的操作次数(java+python)

    给你一个非负整数 num 请你返回将它变成 0 所需要的步数 如果当前数字是偶数 你需要把它除以 2 否则 减去 1 示例 1 输入 num 14 输出 6 解释 步骤 1 14 是偶数 除以 2 得到 7 步骤 2 7 是奇数 减 1 得
  • java Field.canAccess 和 Field.isAccessible

    如果 Field isAccessible 已经过时 则使用 Field canAccess 官方Api boolean Field canAccess Object obj Object obj an instance object of
  • Invalid character found in the request target.The valid characters are defined in RFC 7230 and RFC39

    背景 在将tomcat升级到7 0 81版后 发现系统的有些功能不能使用了 查询日志发现是有些地址直接被tomcat认为存在不合法字符 返回HTTP 400错误响应 错入信息如下 原因分析 经了解 这个问题是高版本tomcat中的新特性 就
  • Intellij IDEA 2019无法联网,无法下载插件问题解决办法

    Intellij IDEA 2019无法联网 无法下载插件问题解决办法 非法不多说直接上图 第一步 第二步 2019 2 之后没有这一步 第三步 记得重启哦 lt 完 gt
  • 代理服务器列表(20100116)

    经测试 今天发布的代理服务器全部都是免费可用的 211 152 11 30 80 69 119 28 234 8085 72 196 11 73 8085 222 66 116 110 8080 41 223 143 16 8080 122
  • 5.1劳动节,Happy May Day!(为什么要调休啊?)

    国际劳动节又称 五一国际劳动节 国际示威游行日 英语 International Workers Day May Day 是世界上80多个国家的全国性节日 定在每年的五月一日 它是全世界劳动人民共同拥有的节日 1889年7月 由恩格斯领导的
  • Unity中的宏定义

    有时候我们需要使用区分不同平台来实现不同的逻辑 这个时候就用到宏定义了 基本语法 if UNITY EDITOR WIN UNITY STANDALONE elif UNITY ANDROID else endif 宏定义可以直接写在类中
  • 基于STM32的正点原子LORA模块通信网络

    LoRa是semtech公司开发的一种低功耗局域网无线标准 其名称 LoRa 是远距离无线电 Long Range Radio 它最大特点就是在同样的功耗条件下比其他无线方式传播的距离更远 实现了低功耗和远距离的统一 它在同样的功耗下比传统
  • 解决“yarn : 无法加载文件 C:\Users\quber\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本”问题

    我们在使用yarn命令的时候 可能会出现如下图所示的错误 出现此错误的原因是本地计算机上运行你编写的未签名脚本和来自其他用户的签名脚本 可以使用如下命令将计算机上的执行策略更改为RemoteSigned 执行命令set ExecutionP
  • 6-3 逆序数据建立链表(20 分)_头插法建链表

    6 3 逆序数据建立链表 20 分 本题要求实现一个函数 按输入数据的逆序建立一个链表 函数接口定义 struct ListNode createlist 函数createlist利用scanf从输入中获取一系列正整数 当读到 1时表示输入
  • CMake常用命令(二) project命令

    文章目录 语法 作用 参数 举例 示例1 基础用法 示例2 VERSION用法 示例3 DESCRIPTION用法 示例4 HOMEPAGE URL用法 示例4 LANGUAGES用法 更多细节 参考 语法 project