一、系统版本

  • cmake version: 3.5.2
  • 系统版本: Ubuntun 16.04
  • cmake docment: 3.14.4
  • 最后更新: 2019-05-31

二、指令说明

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 主要用于提供项目的名称、版本、使用编译语言等信息

注意:

- 在当前系统版本下面,实际上 Project 并不支持 document 提供的 DESCRIPTIONHOMEPAGE_URL

- project 必须放在最上面, 且不能通过 include来包含

2.1 参数解析

  1. PROJECT-NAME:必选

    • 项目名称,配置好值后,会存在 CMAKE_PROJECT_NAME 变量中
  2. VERSION:可选

    • 版本号,主要分为 major(主版本号)、minor(次版本号)、patch(补丁版本号)、tweak, 格式为: 10.2.1.3
    • 设置对应的值后,会依次解析,存在各自对应的变量里面

    以 10.2.1.3 为例

    名称 变量名
    major(主版本号) PROJECT_VERSION_MAJOR 10
    minor(次版本号) PROJECT_VERSION_MINOR 2
    patch(补丁版本号) PROJECT_VERSION_PATCH 1
    tweak PROJECT_VERSION_TWEAK 3
    VERSION CMAKE_PROJECT_NAME 10.2.1.3
  3. LANGUAGES: 可选,如果未配置,默认使用 C 以及 CXX

    • 注意: 如果使用ASM(汇编),需要放在最后面

三、Coding

文件目录结构如下:

rs:cmake-project$ tree
.
├── CMakeLists.txt
├── main.cpp
└── make.sh

CMakeLists.txt 文件内容:


cmake_minimum_required(VERSION 3.5) project(DEMO VERSION 10.2.1.3 LANGUAGES CXX C ASM ) message("CMAKE_PROJECT_NAME = ${CMAKE_PROJECT_NAME}")
message("PROJECT_VERSION = ${PROJECT_VERSION}")
message("PROJECT_VERSION_MAJOR = ${PROJECT_VERSION_MAJOR}")
message("PROJECT_VERSION_MINOR = ${PROJECT_VERSION_MINOR}")
message("PROJECT_VERSION_PATCH = ${PROJECT_VERSION_PATCH}")
message("PROJECT_VERSION_TWEAK = ${PROJECT_VERSION_TWEAK}") add_executable(DEMO main.cpp)

**main.cpp ** 文件内容


#include <iostream> using namespace std; int main(int argv, const char *argc[])
{
cout << "hello world" << endl;
return 0;
}

make.sh 保存一些指令(这个非必须)

#!/bin/sh
rm -rf CMakeFiles
cmake ./
make
./DEMO

3.1 运行 sh make.sh

  • 终端显示:

..... CMAKE_PROJECT_NAME = DEMO
PROJECT_VERSION = 10.2.1.3
PROJECT_VERSION_MAJOR = 10
PROJECT_VERSION_MINOR = 2
PROJECT_VERSION_PATCH = 1
PROJECT_VERSION_TWEAK = 3
-- Configuring done
-- Generating done
-- Build files have been written to: /home/rs/Documents/study/cmake-project
Scanning dependencies of target DEMO
[ 50%] Building CXX object CMakeFiles/DEMO.dir/main.cpp.o
[100%] Linking CXX executable DEMO
[100%] Built target DEMO
hello world
rs:cmake-project$

四、参考链接

https://cmake.org/cmake/help/latest/command/project.html

五、 遗留问题

DESCRIPTION 以及 HOMEPAGE_URL 暂时不支持,不知道使用!

cmake学习之-project的更多相关文章

  1. CMake学习(1)---简单程序与库

    cmake是linux平台下重要的工具,可以方便的组织makefile.之前一直在windows平台下进行软件开发,在vs2010的IDE里,只要一点run程序就能跑出结果.但是程序的编译并没有那么简 ...

  2. CMake学习笔记四:usb_cam的CMakeLists解析

    最近在学习cmake,在完整看了<cmake实践>一书后,跟着书上例程敲了跑了一遍,也写了几篇相关读书笔记,算是勉强基本入门了.所以找了usb_cam软件包的CMakeLists.txt来 ...

  3. cmake学习笔记(五)

    在cmake 学习笔记(三) 中简单学习了 find_package 的 model 模式,在cmake 学习笔记(四)中了解一个CMakeCache相关的东西.但靠这些知识还是不能看懂PySide使 ...

  4. cmake 学习笔记(三)

    转自:http://blog.csdn.net/dbzhang800/article/details/6329314 接前面的 Cmake学习笔记(一) 与 Cmake学习笔记(二) 继续学习 cma ...

  5. cmake 学习笔记(二)

    在 Cmake学习笔记一 中通过一串小例子简单学习了cmake 的使用方式. 这次应该简单看看语法和常用的命令了. 简单的语法 注释 # 我是注释 命令语法 COMMAND(参数1 参数2 ...) ...

  6. CMake学习

    CMake学习 本篇分享一下有关CMake的一些学习心得以及相关使用. 作者:AlphaGL.版权所有,欢迎保留原文链接进行转载 :) 本文目录如下: 1.CMake介绍 2.CMake安装与使用 2 ...

  7. cmake 学习笔记(三) (转)

    接前面的 Cmake学习笔记(一) 与 Cmake学习笔记(二) 继续学习 cmake 的使用. 学习一下cmake的 finder. finder是神马东西? 当编译一个需要使用第三方库的软件时,我 ...

  8. 与你一起学习MS Project——理论篇:项目管理与Project

    Hi,你好!我是大黄蜂,非常高兴借此机会与你一起学习微软Project的相关知识和技能.这一次的分享主要是结合本人在实际使用Project 2013过程中的一些方法技巧,其中有一些材料则来源于互联网, ...

  9. CMake学习笔记四-CMake常用命令

    CMake常用命令 PROJECT PROJECT(projectname [CXX] [C] [Java]) 指定工程名称,并可指定工程支持的语言.支持语言列表可忽略,默认支持所有语言 SET ...

随机推荐

  1. spoj 8222 NSUBSTR 求长度为x的子串中出现次数最大值 SAM

    题目大意 给一个字符串S 令F(x)表示S的所有长度为x的子串中 出现次数的最大值. 求F(1)..F(Length(S)) 分析 一个节点\(x\)的长度有\(~~(max(fa),max(x)]\ ...

  2. spring boot 排除个别配置类的代码

    废话不说,直接上代码 @SpringBootApplication(exclude={DataSourceAutoConfiguration.class,HibernateJpaAutoConfigu ...

  3. luogu 3406 海底高铁 前缀和

    题目链接 题意 给定一个数轴上的若干城市\(1,2,3,...,n\),在第\(i\)到\(i+1\)\((1\leq i\lt n)\)个城市间有铁路,通行方式可为 \(1.\)每次买票(花费\(a ...

  4. linux下编译安装gcc5.1

    一.下载源代码:ftp://ftp.mirrorservice.org/sites/sourceware.org/pub/gcc/releases/gcc-5.1.0/gcc-5.1.0.tar.bz ...

  5. MongoDB的使用[转]

    http://www.cnblogs.com/TankMa/archive/2011/06/08/2074947.html

  6. iOS--子视图如何穿透上层视图响应事件

    一.使用方法:- (nullable UIView *)hitTest:(CGPoint)point withEvent:(nullable UIEvent *)event; 二.背景知识iOS系统检 ...

  7. UVA 10976 Fractions Again?!【暴力枚举/注意推导下/分子分母分开保存】

    [题意]:给你一个数k,求所有使得1/k = 1/x + 1/y成立的x≥y的整数对. [分析]:枚举所有在区间[k+1, 2k]上的 y 即可,当 1/k - 1/y 的结果分子为1即为一组解. [ ...

  8. Java Hibernate事务并发控制

    在产品上线时发现当用户数量大并发性能差,经常发现数据库死锁,经诊断,是由于设置了不正确的事务隔离,可以做如下优级化(这里我们使用JTA事务): JTA具有的3个接口:UserTransaction接口 ...

  9. 【转】.net 经典面试题

    [转].net 经典面试题  1. 简述 private. protected. public. internal 修饰符的访问权限. 答 . private : 私有成员, 在类的内部才可以访问.  ...

  10. [置顶] zabbix发送告警

    之前使用邮件和短信发送zabbix告警信息,但告警信息无法实时查看或者无法发送,故障无法及时通知运维人员. 后来使用第三方微信接口发送信息,愉快地用了一年多,突然收费了. zabbix告警一直是我的痛 ...