首页 > 其他分享 >cmake 的使用

cmake 的使用

时间:2023-12-15 11:11:07浏览次数:42  
标签:文件 cmake target cc makefile 使用 name

cmake

简介

cmake 是一个软件自动化构建工具,在使用C/C++ 编写程序的时候,多个源文件编译一般是通过makefile 工具进行编译生成。可以通过使用cmake 生成一个 makefile文件,再通过 makefile文件生成程序。

简而言之:cmake 用于生成 makefile文件,makefile 文件用于编译源文件生成程序。

在没有cmake 之前,makefile 也可以自己写。

但既然有了cmake,就没有必要再自己写makefile文件了(但对makefile文件仍然要有了解和认识)

CMakeLists.txt

CMakeLists.txt 文件是构建cmake 的核心,配置信息,加载源文件都在其中编写。

一般在文件中首先指定cmake的最低版本。

cmake_minimum_required(VERSION 2.8)

常见参数:

  • project(name) 定义项目名称
  • add_executable(target_name file1.cc file2.cc ) 指定要编译的源文件和生成的可执行文件
  • add_library(target_name STATIC/SHARED file1.cc file2.cc) 生成库文件(静态/动态)
  • find_package(package_name) 查找并使用一个外部库
  • include_directories(dir1 dir2) 指定头文件的搜索路径
  • target_link_libraries(target_name lib1 lib2) 指定链接时需要的库
  • set(variable value) 设置一个变量

示例

比如,我当前有多个源文件,分别为:a.cc, b.cc, c.cc,那么我的CMakeLists.txt 就可以这样写

cmake_minimum_required(VERSION 2.8)
project(out) # 这里的out表示这个工程的名字,默认和变量 PROJECT_NAME 一致。
# 在这里定义project之后,就可以使用 PROJECT_NAME 这个变量。
add_executable(a.out a.cc b.cc c.cc) # 这里的a.out表示即将生成的可执行程序

可以通过set设置一些变量,在文件中使用 ${} 使用变量的值。

set(target_name  "a.out") 
add_executable(${target_name} a.cc b.cc c.cc)

标签:文件,cmake,target,cc,makefile,使用,name
From: https://www.cnblogs.com/zxinlog/p/17902951.html

相关文章

  • 两个线程共享一个套接字,其中一个线程使用sendmsg函数不断发送消息到该套接字,另一个线
    以下是使用C语言写的一段代码,实现两个线程共享一个套接字,其中一个线程使用sendmsg函数不断发送消息到该套接字,另一个线程使用recvmsg函数不断接收该套接字的消息,并打印出来的功能点击查看代码#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.......
  • v-echarts 使用折线图
    <ve-linestyle="top:-40px"height="100%"width="100%":loading="yearChartLoading":data="yearChartData":extend="chartExtend":legend-visible="false":settings="yearSetting......
  • C++(cmake-build-debug 和 cmake-build-release)
    cmake-build-debug和cmake-build-release是两个默认的构建目录名称,通常在使用CMake构建项目时生成。以下是它们的主要作用和区别:1.cmake-build-debug:这是一个用于调试构建的默认构建目录名称。在这个目录下,CMake会生成包含调试信息的可执行文件,以方便在调试器中进行调试......
  • 12月14日插件的具体使用
    配置好环境之后你就可以选择使用mapper或者service了 调用和mapper基本相同但是提供的调用方法更多了。然后你就能够更方便的开始后端开发了。今天的另一件事是逻辑视图建模这是一个针对于外卖管理系统的逻辑视图建模。(一),分析系统用例,确定对象类外卖管理系统包括”商家......
  • Unity shader 里面使用数组
    很多人不知道Unityshader是支持通过C#脚本,往shader脚本里写入数组的。我不知道Properties里面怎么写,但是可以用C#代码往里写。数组的总长度似乎最大2048。注意,是所有数组的总长度加一起不能超过2048。比如你写了五个数组,每个数组的长度是100,五个数组的总长度就是500。不是......
  • google gemini api使用
    title:googlegeminiapi使用banner_img:https://cdn.studyinglover.com/pic/2023/12/334c0c129076533308cbc7e03f8c55be.pngdate:2023-12-1423:15:00tags:-googlegeminigooglegeminiapi使用google最近发布了geminiapi,我之前在我的博客介绍了如何申请,这篇文章来......
  • (原创)安卓快速使用简单的BottomNavigation(结合fragment)
    原创声明:本文所有图片和代码皆由本人制作和编写。目录前言目标效果第0步导入库第1步准备好一些资源fragmentdrawable图标第一小步第二小步第二步创建menu第三步创建navigation注意第四步绑定前言这篇文章是边写大作业边查资料边写的,查了很多资料,翻了很多论坛,也遇到了很多......
  • openGauss学习笔记-159 openGauss 数据库运维-备份与恢复-导出数据-使用gs_dump和gs_d
    openGauss学习笔记-159openGauss数据库运维-备份与恢复-导出数据-使用gs_dump和gs_dumpall命令导出数据-导出所有数据库-导出所有数据库159.1导出所有数据库openGauss支持使用gs_dumpall工具导出所有数据库的全量信息,包含openGauss中每个数据库信息和公共的全局对象信息。可根......
  • RedisTemplate 使用 increasement() 和 get() 时报 SerializationException
    https://cloud.tencent.com/developer/article/1706934 org.springframework.data.redis.serializer.SerializationException:Cannotdeserialize;nestedexceptionisorg.springframework.core.serializer.support.SerializationFailedException:Failedtodeseriali......
  • Docker使用手册--给你通用常用命令
    卸载JDKrpm-qa|grep-ijavarpm-qa|grep-ijava|xargs-n1rpm-e--nodeps安装JDKtar-zxvfjdk-8u351-linux-x64.tar.gzvim/etc/profileexportJAVA_HOME=/home/jdk/jdk-11.0.19exportJRE_HOME=${JAVA_HOME}/jreexportCLASSPATH=.:${JAVA_HOME}/lib:$......