CMake 使用方法 & CMakeList.txt

2023-05-16

cmake 简介


    CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。

CMake 使用方法

    CMake的所有的语句都写在一个叫:CMakeLists.txt的文件中。当CMakeLists.txt文件确定后,可以用ccmake命令对相关 的变量值进行配置。这个命令必须指向CMakeLists.txt所在的目录。配置完成之后,应用cmake命令生成相应的makefile(在Unix like系统下)或者 project文件(指定用window下的相应编程工具编译时)。

    其基本操作流程为:

$> ccmake directory
$> cmake directory
$> make

其中directory为CMakeList.txt所在目录;
  • 第一条语句用于配置编译选项,如VTK_DIR目录 ,一般这一步不需要配置,直接执行第二条语句即可,但当出现错误时,这里就需要认为配置了,这一步才真正派上用场;
  • 第二条命令用于根据CMakeLists.txt生成Makefile文件;
  • 第三条命令用于执行Makefile文件,编译程序,生成可执行文件;

CMake的执行就是这么简单,其难点在于如何编写CMakeLists.txt文件,下面结合例子简单介绍CMakeLists.txt的编写,看下面这个CMakeLists.txt

#project name
PROJECT(test_math)
#head file path
INCLUDE_DIRECTORIES(
include
)
#source directory
AUX_SOURCE_DIRECTORY(src DIR_SRCS)
#set environment variable
SET(TEST_MATH
${DIR_SRCS}
)
#set extern libraries
SET(LIBRARIES
libm.so
)
#add executable file
ADD_EXECUTABLE(../bin/bin ${TEST_MATH})
#add link library
TARGET_LINK_LIBRARIES(../bin/bin ${LIBRARIES})
 

或者用下面这个CMakeLists.txt
#project name
PROJECT(test_math)
#head file path
INCLUDE_DIRECTORIES(
include
)
#source directory
AUX_SOURCE_DIRECTORY(src DIR_SRCS)
#set environment variable
SET(TEST_MATH
${DIR_SRCS}
)
#add executable file
ADD_EXECUTABLE(../bin/bin ${TEST_MATH})
#add link library
TARGET_LINK_LIBRARIES(../bin/bin m)

这是一个测试数学函数的程序的CMakeLists.txt,"#"后面为注释的内容,CMake的命令全部为大写

第2行指定生成的工程名为test_math

第4行指定头文件目录为include

第8行指定源文件目录为src,并将其赋值给环境变量DIR_SRCS

第10行设定环境变量TEST_MATH的值为环境变量DIR_SRCS的值,此处用于显示如何用环境变量对环境变量进行赋值

第14行将数学函数库赋值给环境变量LIBRARIES,当然,可以不用这个环境变量,而在后面直接使用该库名

第18行用于指定生成文件,将环境变量TEST_MATH目录下的所有文件编译生成../bin目录下的可执行文件bin

第20行指定../bin/bin执行时的链接库为环境变量LIBRARIES的值-libm.so

下面给出源文件
/src/main.c:

#include<stdio.h>
#include"../include/a.h"
int main()
{
    double b=25.0;
    double a=0.0;
    a=get_sqrt(b);
 
    printf("a is %lf, b is %lf\n",a,b);
    return 0;
}


 

/src/a.c

#include"../include/a.h"
double get_sqrt(double var1)
{
    return sqrt(var1);
}


 

/include/a.h

#ifndef  A_FILE_HEADER_INC
#define  A_FILE_HEADER_INC
#include<math.h>
 
double get_sqrt(double var1);
 
#endif 


 

将CMakeLists.txt放在当前目录下,执行CMakeLists.txt

$> cmake .
$> make


 

即可生成可执行文件,在目录/bin下的bin文件,好了运行看其效果是否和所想一样。

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

CMake 使用方法 & CMakeList.txt 的相关文章

  • 如何使用 CMake 安装文件层次结构?

    我使用以下方法创建了文件列表 file GLOB RECURSE DEPLOY FILES PROJECT SOURCE DIR install 我想将所有这些文件安装在 usr myproject 但我想维护已安装文件夹上的文件树 ins
  • 如何在使用 Cmake 构建期间编译 HLSL 着色器?

    我正在开发 d3d 应用程序 我想在使用 cmake 构建期间编译我的 hlsl 着色器 我不知道从哪里开始 这是我当前的 CMakeLists txt cmake minimum required VERSION 3 20 project
  • CMake“无法运行 MSBUILD.exe”命令错误

    当我想为 opencv 3 3 0 创建 Visual Studio 15 2017 make 文件时 它给了我以下错误消息 error in configuration process project files maybe invali
  • 如何在Linux上构建GLFW3项目?

    我已经使用 cmake 和 make 编译了 glfw3 和包含的示例 没有出现任何问题 开始编写我的第一个项目 作为 opengl 和 glfw 的新手 并且对 C 和 CMake 没有经验 我正在努力理解示例构建文件 甚至要链接哪些库和
  • 为什么 CMake 不通过在定义该变量之前创建的 CMAKE_CXX_STANDARD 将语言标准编译标志添加到目标?

    我在用着cmake version 3 22 1 and c Ubuntu 11 3 0 1ubuntu1 22 04 11 3 0 以及非常简约的CMakeLists txt 我无法让 CMAKE 使用 C 20 Setting set
  • 将 gcov 与 CMake/CDash 结合使用的详细指南?

    我在我的项目中使用 CMake 并设置了 cdash 服务器以进行连续 夜间构建 一切运行良好 通过设置 crontab 我们可以将每小时 每晚的构建 测试结果自动上传到我们的 cdash 服务器 我的下一步是将测试覆盖率报告添加到构建中
  • CMake(Ninja 后端)使用 /MT 编译

    我有一个类似的问题CMake 使用 MT 而不是 MD 进行编译 https stackoverflow com questions 14172856 cmake compile with mt instead of md但有一些差异 我正
  • 如何使用自定义 CMake 版本执行 Visual studio 2019 Ninja 构建?

    我正在尝试从 IDE 在 Visual Studio 2019 上使用 Ninja 构建一个项目 我想使用与 VS 2019 发行版中集成的版本不同的 CMake 版本 我已经设置了cmakeExecutable我的变量CMakeSetti
  • 如何在cmake中将构建类型更改为Release模式?

    我正在尝试以发布模式构建一个项目 默认情况下它是在调试模式下构建的 我正在设置变量CMAKE BUILD TYPE到 释放 CMakeLists txt 但它仍在调试模式下构建项目 当我在 CMake 命令中传递 Release 作为构建类
  • Opencv - 找不到头文件

    我正在尝试使用 opencv 开始开发 问题是 到目前为止我几乎无法设置 opencv 因为我找不到它的头文件 我对此主题进行了一些研究 但没有一个真正有帮助 下面是一些链接 opencv2 包含文件在哪里 https stackoverf
  • CMake 错误:“add_subdirectory 未给出二进制目录”

    我正在尝试将 Google Test 集成到更大项目的子项目中 但找不到令我满意的解决方案 我有两个限制 Google Test 的源代码已经位于项目结构中的某个位置 因此不能使用 URL 从 git 存储库下载它 Google Test
  • 将 cmake 与 nmake x64 一起使用

    我使用 cmake 生成 NMake 文件 一切正常 我使用 x64 工具集 没有 Visual Studio 只有 SDK 因此我输入 nmake 但它生成 x86 构建而不是 x64 构建 你知道为什么吗 以及如何强制 nmake 以
  • 使用 CMake 编译时更改头文件位置会导致缺少 vtable 错误

    对于一个大型 C 项目 我需要从 qmake 过渡到 CMake 但是在处理一个玩具示例时 我遇到了一些我不理解的行为 示例代码具有单个头文件 当该头文件移动到子目录中时 我收到 MainWindow 类缺少 vtable 的错误 CMak
  • 如何在 CMake 中运行基本的“add_custom_command”

    我只是想启动并运行一个基本的 CMake 示例 它可以运行一些基本的命令行命令 我已经研究这个有一段时间了 但没有任何运气 我完全用错了吗 任何和所有的意见将不胜感激 cmake minimum required VERSION 3 0 a
  • 如何使用cmake自动构建第三方库

    我在寻找什么 下载库 提取它 应用自定义补丁 运行配置 运行构建命令 我正在尝试构建的库是 Openssl Boost Thrift C ares Curl Pcre Nginx ICU JsonCPP 我想我可以使用外部模块做这些事情 h
  • 奇怪的函数参数名称行为

    我问了一个关于cmake和传递变量的问题here https stackoverflow com questions 14375519 cmake how to write a nice function that passes varia
  • CMake第三方库安装

    我是编程新手 对于我的研究项目 我需要安装一个第三方库以便与 CMake 一起使用 GitHub项目 https github com cpp io2d P0267 RefImpl blob master BUILDING md 我在我的电
  • 即使不在 Windows 上,生成器表达式也会将 WIN32 变量计算为 true

    我在 Ubuntu 上工作 这是我的 CMake 代码的一部分 有问题的部分在最后一句中 include ExternalProject ExternalProject Add fftw3 external URL http www fft
  • CMake 链接 glfw3 lib 错误

    我正在使用 CLion 并且正在使用 glfw3 库编写一个程序 http www glfw org docs latest http www glfw org docs latest 我安装并正确执行了库中的所有操作 我有 a 和 h 文
  • Visual Studio 2022 CMake 预设

    我在我的项目中使用 CMake 并开始探索 CMakePresets 的可能性 我设法创建了一个默认的 Windows 预设 目前我的 Windows 默认预设将 CMAKE BUILD TYPE 设置为调试 现在我想在左侧下拉列表中选择配

随机推荐

  • Oracle ora-12514报错解决方法

    目录 一 问题描述二 解决方法 一 问题描述 Oracle 报错 ora 12514 二 解决方法 修改 tnsnames ora xff0c 一般在 D oracle product 10 2 0 client 1 NETWORK ADM
  • “你需要来自XXX的权限才能对此文件夹进行更改”的解决方法

    目录 一 问题描述二 解决方法1 方法1 xff1a 鼠标右键文件夹 xff0c 选择 属性 gt 安全 选项卡 xff0c 对用户进行授权2 方法2 xff1a 选择 高级 xff0c 更改所有者 xff0c 并添加至权限条目3 方法3
  • windows10获取超级管理员权限

    目录 一 新建文本文件 xff0c 命名为带 reg后缀的文件 xff0c 添加以下内容二 鼠标双击运行三 鼠标右键要获取权限的文件夹 xff0c 选择 获取超级管理员权限 一 新建文本文件 xff0c 命名为带 reg后缀的文件 xff0
  • python2.7安装

    目录 一 下载二 安装三 设置环境变量四 验证 一 下载 1 通过 python 官网 https www python org 找到 2 7 版本进行下载 xff1a https www python org downloads rele
  • sharding报错no table route info

    目录 一 问题描述二 解决方法 一 问题描述 集成 sharding 执行数据库操作报错 xff1a no table route info 二 解决方法 一般为分库分表策略配置错误 xff0c 请检查 application yml 文件
  • Nginx配置http跳转https

    目录 一 return 301二 rewrite三 497 状态码四 meta 刷新 Nginx 可通过多种方式实现 http 跳转 https xff0c 以下列出各种方式的实现方法 一 return 301 这是 Nginx 新版本的写
  • OpenFlow网络、OpenFlow交换机及OpenFlow协议的知识总结

    目录 OpenFlow起源与发展 OpenFlow网络 1 OpenFlow交换机 xff1a 2 FlowVisor xff1a 3 Controller xff1a OpenFlow交换机 分类 安全通道 流表 OpenFlow协议 x
  • 【高效运维】Jenkins之uni-app自动化部署

    目录 一 前言二 使用 Pipeline 创建任务1 创建一个流水线任务2 配置流水线 xff08 1 xff09 配置构建触发器 xff08 2 xff09 配置流水线 xff08 Pipeline script from SCM xff
  • Windows下安装Redis7.0.8

    目录 一 下载二 解压三 启动服务四 客户端连接测试五 把 redis 安装到服务1 安装2 启动服务3 停止服务4 卸载服务 一 下载 官网上没有 windows 版本的 redis 下载 xff0c 需要到 github 下载 xff1
  • 若依微服务版之集成Mybatis-Plus和Lombok

    目录 一 修改根目录 pom xml二 修改 ruoyi common core 的 pom xml三 去掉 nacos 配置文件中的 mybatis 配置 xff0c 添加 mybatis plus 配置四 添加配置类并注入五 注入类六
  • Windows下安装JDK

    目录 一 下载二 安装三 设置环境变量1 新增环境变量 JAVA HOME2 新增环境变量 CLASS PATH3 环境变量 PATH 添加变量值 四 验证 一 下载 下载链接 xff1a https www oracle com java
  • CentOS7下安装superset

    目录 一 前言二 安装 Miniconda1 下载2 安装3 加载环境变量配置文件4 取消激活 base 环境 三 创建 Python3 9 环境1 配置 conda 国内镜像2 创建 superset 环境并指定 Python3 93 激
  • Java--a++与 ++a 与 a=a+1 与a+=1

    a 43 43 等效 a 61 a 43 1 43 43 a 等效 a 43 61 1 计算顺序的区别 xff1a a 43 43 是先参加程序的运行再 43 1 xff0c 而 43 43 a则是先 43 1再参加程序的运行 举例 xff
  • 数据仓库系列文章二:浅谈企业数据仓库总线矩阵

    Kinball在 数据仓库工具箱 一书中 xff0c 详细阐述维度建模思想 xff0c 并给出维度建模的众多实践 维度建模的核心内容和建设过程在实践中已经被大家所熟知 xff0c 网上教程也很多 xff0c 本文不做赘述 本文重点谈一谈企业
  • Java中 List、Set、Map 之间的区别

    小博此篇记录了开发过程中常用的几种集合详解 xff0c 三者的区别对比均从IDEA相关层次图里面所得知 xff0c 基于JDK8 xff0c 如有错误欢迎批评指正 List 列表 List的元素以线性方式存储 xff0c 可以存放重复对象
  • DuiLib介绍及其消息处理剖析

    DirectUI技术 DirectUI意为直接在父窗口上绘图 Paint on parent dc directly 即子窗口不以窗口句柄的形式创建 windowless xff0c 只是逻辑上的窗口 xff0c 绘制在父窗口之上 微软的
  • xargs命令

    原作者地址 xff1a https www cnblogs com chyingp p linux command xargs html 感谢原作者 Linux基础 xff1a xargs命令 简介 xargs可以将输入内容 xff08 通
  • 为何HBase速度很快?

    为何HBase速度很快 xff1f HBase能提供实时计算服务主要原因是由其架构和底层的数据结构决定的 xff0c 即由LSM Tree Log Structured Merge Tree 43 HTable region分区 43 Ca
  • VirtualBox虚拟机不能ping通宿主机的解决方法

    解决VirtualBox虚拟机不能ping通宿主机的问题 问题描述 在VirtualBox虚拟中 xff0c 无法ping通宿主机 xff0c 宿主机可以ping通虚拟机 虚拟机的网络已经设置为 桥接网卡 xff0c 也可以正常上网 问题原
  • CMake 使用方法 & CMakeList.txt

    cmake 简介 CMake是一个跨平台的安装 编译 工具 可以用简单的语句来描述所有平台的安装 编译过程 他能够输出各种各样的makefile或者project文件 能测试编译器所支持的C 43 43 特性 类似UNIX下的automak