首页 > 其他分享 >CMakeLists.txt基本语法及使用

CMakeLists.txt基本语法及使用

时间:2024-03-19 13:12:46浏览次数:21  
标签:CMakeLists main cmake 语法 编译 ADD cpp txt HELLO

1、cmake的说明

cmake是一种高级编译配置工具 当多个人用不同的语言或者编译器开发一个项目,最终要输出一个可执行文件或者共享库(dll,so等等)这时候便需要用到cmake。 CMakeList.txt中指令不区分大小写。 CMakeList.txt中的参数和变量是区分大小写,名称只能用字母,数字,下划线,破折号。 学习CMake,有助于我们与他们协同开发大型c/c++/java项目。  

2、cmake安装

sudo apt intall cmake
安装完成之后可以通过
cmake --version
来检查你电脑上所安装的cmake版本  

3、cmake的使用

安装完成后,我们简单写一个main.cpp
#include <iostream>
using namespace std;
int main()
{
    cout << "hello world!" << endl;
    return 0;
}
编写编译所需要的CMakeLists.txt文件
PROJECT(HELLO)
SET(SRC_LIST main.cpp)
MESSAGE(STATUS "this is binary dir" ${HELLO_BINARY_DIR})
MESSAGE(STATUS "this is source dir" ${HELLO_SOURCE_DIR})
ADD_EXECUTABLE(hello ${SRC_LIST})
编译得到的全部文件: 0 编译时所看到的编译Log打印如下: 0  

4、cmake的语法

1)CMAKE_MINIMUM_REQUIRED关键字 CMAKE_MINIMUM_REQUIRED(VERSION 2.6) // 指定限定的最小的cmake版本,可省略   2)PROJECT关键字 PROJECT(HELLO) // 指定工程的名字,并且支持所有语言 PROJECT(HELLO CXX) // 指定工程的名字为HELLO,并且支持的语言是c++ PROJECT(HELLO C CXX) // 指定工程的名字为HELLO,并且支持的语言是c和c++ 该指定隐式定义了两个CMAKE变量 _BINARY_DIR,本例中是HELLO_BINARY_DIR _SOURCE_DIR,本例中是HELLO_SOURCE_DIR MESSAGE关键字可以直接使用这两个变量,都指向当前的工作目录   3)SET关键字 用来显示的指定变量的 SET(SRC_LIST main.cpp) // SRC_LIST变量中就包括了main.cpp 也可以包含多个文件,例如:SET(SRC_LIST main.cpp test1.cpp test2.cpp)   4)MESSAGE关键字 向终端输出用户自定义信息 主要包含三种信息: SEND_ERROR,产生错误,生成过程被跳过 STATUS,输出前缀为--的信息 FATAL_ERROR,立即终止所有cmake过程   5)ADD_EXECUTABLE关键字 生成可执行文件 ADD_EXECUTABLE(hello ${SRC_LIST}) 生成的可执行文件名为hello,源文件读取变量SRC_LIST中的内容 也可以直接写成 ADD_EXECUTABLE(hello main.cpp) 工程名的HELLO和生成的可执行文件hello没有任何关系   6)ADD_SUBDIRECTORY指令 例如:ADD_SUBDIRECTORY(source_dir [binary_dir] [EXCLUDE_FROM_ALL]) 该指令用于向当前工程添加存放源文件的子目录,并可以指定中间二进制和目标二进制存放的位置 EXCLUDE_FROM_ALL函数是将写的目录从编译中排除 例如:ADD_SUBDIRECTORY(src bin) 将src子目录加入工程并指定编译输出(包含编译中间文件)路径为bin目录   7)ADD_LIBRARY关键字 ADD_LIBRARY默认生成是静态库 ADD_LIBRARY(common STATIC test.cpp) // 生成静态库 ADD_LIBRARY(common SHARED test.cpp) // 生成动态库或共享库   8)FIND_PACKAGE 查找指定的预编译包 例如:find_package(OpenCV 4.1 REQUIRED) // 查找opencv 4.1 安装路径 相似的指令还有 find_file()、find_path()、find_program()、find_library()   9)INCLUDE_DIRECTORIES 加载编译所需要的文件 例如:include_directories(OpenCV_INCLUDE_DIRS) // 加载opencv 4.1的头文件   10)TARGET_LINK_LIBRARIES 链接文件到目标文件中  

5、内部构建和外部构建

由于cmake产生的文件太多,所以我们可以使用外部构建方法,如下: 0 这种的方式会将编译生成的中间文件和生成产物放在build目录下,源文件还在cmake目录下。做到分类清晰。  

6、工程使用

添加外部CMakeLists.txt文件 0 编译生成的所有文件如下: 0 可以看到,在src目录下放置的是源文件,在build/bin目录下放置的是hello可执行文件  

标签:CMakeLists,main,cmake,语法,编译,ADD,cpp,txt,HELLO
From: https://www.cnblogs.com/lethe1203/p/18082534

相关文章

  • android.mk语法记录
    遇到的android.mk语法在此记录,持续更新ifeq($(TEST_PATH),)//如果TEST_PATH为空的话继续往下执行LOCAL_PATH:=$(abspath$(callmy-dir)/../..)//my-dir返回当前的路径,abspath取绝对路径TEST_PATH:=$(abspath$(LOCAL_PATH)/../../../..)elseLOCAL_PATH:=......
  • sql语句基础语法之 数据表的添加相关 ​字段相关操作 ​数据筛选相关操作 ​数据排序
    3月18日数据表的筛选数据,字段操作,聚合函数内容如下:​数据表的添加相关​字段相关操作​数据筛选相关操作​数据排序相关操作​聚合函数数据表的添加相关usemydb;createtableclass_img(`id`intuniquekeyauto_incrementcomment'序号',`grade`i......
  • Java 基础语法(2)
    一、流程控制结构1.分支结构if语句if(条件){语句;}elseif(条件){语句;}else{语句;}switch语句switch(变量){case"":语句;break;case"":case"":case"":……语句;break;default:语句;}2.循环结构for循环for(初始化语句......
  • MarkDown最基本语法
    c语言程序设计——实验报告一实验项目名称:实验一熟悉C语言运行环境实验项目类型:验证性实验日期:2023年3月14日一、实验目的下载安装Devc6.0程序。了解在该系统上如何进行编辑、编译、连接和运行一个C程序。通过运行简单的C程序了解C程序的特点。二、实验硬、软件环境Wi......
  • [20240313]使用tpt ashtop.sql脚本的困惑.txt
    [20240313]使用tptashtop.sql脚本的困惑.txt--//使用tptashtop.sql脚本遇到的问题,做一些分析以及说明:1.环境:[email protected]:9014/ywdb>@ver1PORT_STRING                   VERSION       BANNER---------------------------------------------......
  • JavaScript学习笔记2: js书写语法及变量
    JS书写语法以及变量变量声明变量<style>vara=20;a="张三";//js是一门弱类型语言,变量可以存放不同类型的值</style>几种不同的变量声明方式varvar定义的是全局变量在代码块中声明的变量,在代码块外也可以访问可以重复定义<style>{v......
  • 轻松搞定R语言“Warning:In normalizePath(path.expand(path), winslash, mustWork):文
    问题如下:初学R易语言在RStudio安装tidyverse包时,会出现如下警告;解决方法一:以Win11系统为例:1、右击此电脑,点击属性。2、点击高级设置。3、点击环境变量。4、新建用户变量。5、新建用户变量,设置变量名为R_User,变量值点览目录,选择RStudio安装目录,最后确定即可。6、......
  • CSS样式表和调试工具及语法及符合选择器
    注:CSS样式表,chrome调试工具,Emmet语法,css符合选择器一.样式表按照CSS样式书写的位置(或者引入的方式),CSS样式表可以分为三大类:1.行内样式表(行内式)行内样式表(内联样式表)是在元素标签内部的style属性中设定CSS样式。适合于修改简单样式。语法:<divstyle="color......
  • JSX(JavaScript XML)语法
    1.在script标签中使用JSX语法需要:使用babel在script标签上添加:type="text/babel"2.JSX中的注释使用//、/**/使用{/**/}3.嵌入数据情况一:当变量是Number、String、Array类型时,可以直接显示情况二:当变量是null、undefined、Boolean类型时,内容为空;如果希望可以显示......
  • Markdown基础语法
    Markdown基础语法 来源 https://www.cnblogs.com/liuzhongkun/p/15647326.html目录Markdown语法1、Markdown标题2、Markdown段落3、Markdown字体4、Markdown分隔线5、Markdown删除线6、Markdown下划线7、Markdown脚注8、Markdown列表9、Markdown区块区块和列表......