当前位置: 首页 > news >正文

【CMake】第2篇 CMake构建.h与.cpp文件

目录

1、文件目录结构

add.h

 add.cpp

main.cpp

CMakeLists.txt

2、CMake构建项目

3、构建工程优化

使用 aux_source_directory(./src SRC_LIST)

 4、优化目录,生成可执行文件到bin下


1、文件目录结构

首先来看一下目前的目录结构:

add.h

#ifndef ADD_H
#define ADD_H

int add(int numA, int numB);

#endif

 add.cpp

#include "add.h"

int add(int numA, int numB)
{
    return numA + numB;
}

main.cpp

#include <iostream>
#include "add.h"

int main()
{
   std::cout << "numA + numB = " << add(10,20) <<std::endl;
   return 0;
}

CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
project(test)
include_directories(./include)
set(SRC_LIST ./src/add.cpp ./src/main.cpp)
add_executable(main ${SRC_LIST})
  •  cmake_minimum_required(VERSION 2.8)

指定cmake的最小版本。

  • project(test)

设置项目名称。

  • include_directories(./include)

用来包含头文件目录。

  • set(SRC_LIST ./src/add.cpp ./src/main.cpp)

用来定义变量,使用${}取出值。

2、CMake构建项目

 进入build目录:

cd build/

执行cmake ..

cmake ..

执行make 

make

 执行main文件

./main 

3、构建工程优化

上述使用:

set(SRC_LIST ./src/add.cpp ./src/main.cpp)

用来指定源码位置,但是如果src文件夹下面有几千几百个源文件的话,难道要添加上百次???

适合源码文件比较少的情况下。

使用 aux_source_directory(./src SRC_LIST)

选择src文件夹下面的所有文件。

cmake_minimum_required(VERSION 2.8)
project(test)
include_directories(./include)
aux_source_directory(./src SRC_LIST)
add_executable(main ${SRC_LIST})

然后执行:

cd build
cmake ..
make
./main

结果展示:

 4、优化目录,生成可执行文件到bin下

目录结构:

 修改CMakeLists.txt文件:

cmake_minimum_required(VERSION 2.8)
project(test)
add_subdirectory(./src)

当cmake执行到第三行时,去src目录下找CMakeLists.txt文件。

cmake_minimum_required(VERSION 2.8)
project(test)
aux_source_directory(./ SRCLIST)
include_directories(../include) 
add_executable(main ${SRCLIST})
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../bin)

EXECUTABLE_OUTPUT_PATH:目标二进制可执行文件存放的位置
PROJECT_SOURCE_DIR:代表的工程的路径
PROJECT_BINARY_DIR:代表编译的是编译的路径

 执行如下操作:

cd build
cmake ..
make
cd ..
cd bin
./main

相关文章:

  • Kmeans
  • 【C++】C++11的那些新特性
  • 【数据结构 | 入门】线性表与链表 (问题引入实现算法优化)
  • vmware虚拟机中的archlinux无法播放声间的解决办法
  • 深度学习常用的backbone有哪些
  • 君正X2000/X1600主控CPU方案有哪些场景?行业迈向人机交互智能时代来啦!
  • c++类和对象万字详解
  • Less预处理——初识Less
  • 在低浓度下修饰生物分子的Pyrimidine-Tetrazine-PEG1-Alkyne 四嗪试剂
  • 【web前端开发】前端生日礼物--主页面篇
  • Linux 驱动开发 五十六:Buildroot 笔记
  • 移动端JDtoolbar
  • 公众号题库搜题对接(免费接口)
  • 傻妞机器人对接TG【无需QQ】
  • Mysql基础 (二)
  • 「面试题」如何实现一个圣杯布局?
  • 30天自制操作系统-2
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • canvas 高仿 Apple Watch 表盘
  • CentOS从零开始部署Nodejs项目
  • JavaScript设计模式系列一:工厂模式
  • js中的正则表达式入门
  • 分类模型——Logistics Regression
  • 高性能JavaScript阅读简记(三)
  • 构建工具 - 收藏集 - 掘金
  • 前端代码风格自动化系列(二)之Commitlint
  • 悄悄地说一个bug
  • 驱动程序原理
  • 如何在GitHub上创建个人博客
  • 微信小程序:实现悬浮返回和分享按钮
  • 微信小程序--------语音识别(前端自己也能玩)
  • 小而合理的前端理论:rscss和rsjs
  • 硬币翻转问题,区间操作
  • 用mpvue开发微信小程序
  • 自动记录MySQL慢查询快照脚本
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (16)Reactor的测试——响应式Spring的道法术器
  • (23)Linux的软硬连接
  • (libusb) usb口自动刷新
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (循环依赖问题)学习spring的第九天
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • .cfg\.dat\.mak(持续补充)
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .NET CORE Aws S3 使用
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装