单个源文件

  

# CMake 最低版本号要求
cmake_minimum_required (VERSION 3.11) # 项目信息
project (Demo) # 指定生成目标
add_executable(Demo main.cc)

cmake_minimum_required:指定运行此配置文件所需的 CMake 的最低版本;

project:参数值是 Demo,该命令表示项目的名称是 Demo。

add_executable: 将名为 main.cc 的源文件编译成一个名称为 Demo 的可执行文件

同一目录,多个源文件

  

# CMake 最低版本号要求
cmake_minimum_required (VERSION 3.11) # 项目信息
project (Demo) # 查找当前目录下的所有源文件
# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS) # 指定生成目标
add_executable(Demo ${DIR_SRCS})
#或者:add_executable(Demo main.cc math_function.cc math_function.h)

aux_source_directory: 查找指定目录下的所有源文件,然后将结果存进指定变量名.

多个目录,多个源文件

  

  • Demo目录下的CMakeLists.txt
# CMake 最低版本号要求
cmake_minimum_required (VERSION 3.11) # 项目信息
project (Demo) # 查找当前目录下的所有源文件
# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS) # 添加 math 子目录
add_subdirectory(math) # 指定生成目标
add_executable(Demo ${DIR_SRCS}) # 添加链接库
target_link_libraries(Demo MathFunctions)
  • math目录下的CMakeLists.txt
# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_LIB_SRCS 变量
aux_source_directory(. DIR_LIB_SRCS) # 生成链接库,库名为MathFunctions
add_library (MathFunctions ${DIR_LIB_SRCS})

add_subdirectory:指明本项目包含一个子目录 math,这样math目录下的文件才会被处理 

target_link_libraries指明可执行文件 main 需要连接一个名为 MathFunctions 的链接库。

Notepad案例

  

  • ./Notepad/CMakeLists.txt
cmake_minimum_required(VERSION 3.11)

PROJECT (Notepad)

# Require "qa" and "xml" for debug report.
if(MSVC)
find_package(wxWidgets REQUIRED COMPONENTS core base qa xml)
else()
# Require "net" for create server/client between two instances.
find_package(wxWidgets REQUIRED COMPONENTS core base net qa xml)
endif() include(${wxWidgets_USE_FILE}) set(Boost_USE_STATIC_LIBS ON) find_package(Boost) if(Boost_FOUND)
include_directories(${Boost_INCLUDE_DIRS})
endif() include_directories(${PROJECT_SOURCE_DIR}/src) add_subdirectory(src)
  • ./Notepad/src/CMakeLists.txt
add_subdirectory(notepad)
  • ./Notepad/src/notepad/CMakeLists.txt
aux_source_directory(. DIR_SRCS)

set(TARGET_NAME notepad)

add_executable(${TARGET_NAME} WIN32 ${DIR_SRCS})

target_link_libraries(${TARGET_NAME} ${wxWidgets_LIBRARIES})

CMake 案例的更多相关文章

  1. CMake系列之二:入门案例-单个源文件

    编写一个源码文件 如下 #include<stdio.h> #include<stdlib.h> double power(double base,int exponent) ...

  2. CMake 教程

    CMake是一个跨平台的程序构建工具,比如起自己编写Makefile方便很多. 介绍:http://baike.baidu.com/view/1126160.htm 本文件不介绍CMake的基本语法, ...

  3. qt cmake

    写在前面的话:强烈建议优先阅读Qt官网文档对cmake的使用介绍——CMake Manual 前言我去年用clion写Qt的时候,找了很多教程,也没有什么让我觉得很满意的.后来自己摸索,构建了一个我自 ...

  4. CMake 入门实战【转】

    本文转载自:http://www.hahack.com/codes/cmake/ 什么是 CMake All problems in computer science can be solved by ...

  5. CMake的含义和用法解读

    什么是 CMake 你或许听过好几种 Make 工具,例如 GNU Make ,QT 的 qmake ,微软的 MS nmake,BSD Make(pmake),Makepp,等等.这些 Make 工 ...

  6. 使用visual studio配置和运行《opengl圣经》的第一个案例

    对vc++新手来说,想把opengl圣经里的教学案例运行起来还真不是一件容易的事情,而且并没有完整的操作流程教学,这里就总结一下吧: 先安装cmake,用于生成vs的工程文件,安装过程中选中“将目录添 ...

  7. C++ CMake 入门实战[转载]

    C++ CMake 入门实战 2016-11-05 CMake用于跨平台的编译系统,对于通常的c/c++工程,都是通过make来进行编译的,CMake可以通过指令生成Makefile文件来指导整个项目 ...

  8. zabbix生产环境案例(三)

    生产环境案例(三) 链接:https://pan.baidu.com/s/1q5YwJMTcZLcS5OQ0iOu44A 提取码:8gdi 复制这段内容后打开百度网盘手机App,操作更方便哦 1. Z ...

  9. 2020BUAA-个人博客-案例分析

    个人博客作业-软件案例分析 项目 内容 北航2020软工 班级博客 作业要求 具体要求 我的课程目标 通过案例分析提升自己对于软件工程的认识 课程收获 分析软件,了解软件的定位 第一部分 调研,评测( ...

随机推荐

  1. Linear Regression and Maximum Likelihood Estimation

    Imagination is an outcome of what you learned. If you can imagine the world, that means you have lea ...

  2. Kubernetes探索学习002--Kubernetes的基本使用

    Kubernetes 的基本使用方法 原则:使用YAML文件描述你要部署的API对象! 以部署nginx静态站点为例,具体操作及内容如下 1.编写YAML文件 [root@kubernetes01 ~ ...

  3. HTTP-HTTPS区别

    超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂 ...

  4. 解决iscroll.js上拉下拉刷新手指划出屏幕页面无法回弹问题

    博客已迁移至http://zlwis.me. 使用过iscroll.js的上拉下拉刷新效果的朋友应该都碰到过这个问题:在iOS的浏览器中,上拉或下拉刷新时,当手指划出屏幕后,页面无法弹回.很多人因为解 ...

  5. IntelliJ IDEA 自动编译功能无法使用,On 'update' action:选项里面没有update classes and resources这项

    https://zhidao.baidu.com/question/1381265197230335740.html

  6. 【探路者】Postmortem会议(“事后诸葛亮”会议)

    [探路者]Postmortem会议(“事后诸葛亮”会议) 整理:米赫 设想和目标 1.我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们的贪吃蛇游戏主要将完成一个 ...

  7. C++:模板——函数模板1

    一.为什么使用函数模板 假设我们在程序中需要比较两个变量的大小,但变量的类型可能是int.float或者double,此时为了满足程序的要求我们可能会在程序中编写多个函数,如: //比较两个int型变 ...

  8. 如何获取启动页activity

    启动页activity指App启动的第一个activity,介绍几种查看启动页activity的方法: 方法一:问开发,最有效的获取方式 方法二:dumpsys package 包名,前提是知道包名( ...

  9. js弹出框 -搜索

    警告框alert() alert是警告框,只有一个按钮“确定”无返回值,警告框经常用于确保用户可以得到某些信息.当警告框出现后,用户需要点击确定按钮才能继续进行操作.语法:alert("文本 ...

  10. Code128

    条形码 条形码(barcode)是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标识符.常见的条形码是由反射率相差很大的黑条(简称条)和白条(简称空)排成的平行线图案.条形 ...