最近项目代码重构切换到了cmake的编译环境下。 有幸学习了一下cmake的一些基本的操作,记录一下。

0 . 创建一个工程

0.0 指明工程需要的cmake的最低版本(或者是最低到最高)

cmake_minimum_required(VERSION 3.1.2 FATAL_ERROR)
# cmake_minimum_required(VERSION <min>[...<policy_max>] [FATAL_ERROR])

0.1 指定工程的名称以及 编程语言等特点

project(myAwesomePrj)# project(<PROJECT-NAME> [<language-name>...])
# project(<PROJECT-NAME>
#        [VERSION <major>[.<minor>[.<patch>[.<tweak>]]]]
#        [DESCRIPTION <project-description-string>]
#        [HOMEPAGE_URL <url-string>]
#        [LANGUAGES <language-name>...])

1. cmake 生成工程

1.1 生成可执行文件

add_executable( application ${CMAKE_CURRENT_LIST_DIR}/1.cpp${CMAKE_CURRENT_LIST_DIR}/2.c
)
[jeason@centos7 cmake]$ mkdir build && cd build
[jeason@centos7 build]$ cmake ..
-- The C compiler identification is GNU 4.8.5
-- The CXX compiler identification is GNU 4.8.5
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/jeason/cmake/build
[jeason@centos7 build]$ make
Scanning dependencies of target application
[ 33%] Building CXX object CMakeFiles/application.dir/1.cpp.o
[ 66%] Building C object CMakeFiles/application.dir/2.c.o
[100%] Linking CXX executable application
[100%] Built target application
[jeason@centos7 build]$ ls -l
total 40
-rwxrwxr-x. 1 jeason jeason  8376 Dec  5 09:19 application
-rw-rw-r--. 1 jeason jeason 11635 Dec  5 09:19 CMakeCache.txt
drwxrwxr-x. 5 jeason jeason  4096 Dec  5 09:19 CMakeFiles
-rw-rw-r--. 1 jeason jeason  1353 Dec  5 09:19 cmake_install.cmake
-rw-rw-r--. 1 jeason jeason  5278 Dec  5 09:19 Makefile
[jeason@centos7 build]$

1.2 生成静态库

cmake_minimum_required(VERSION 3.1.6)
project(myAwesomePrj)add_library( temp STATIC${CMAKE_CURRENT_LIST_DIR}/1.cpp${CMAKE_CURRENT_LIST_DIR}/2.c
)
[jeason@centos7 cmake]$ mkdir build && cd build
[jeason@centos7 build]$ cmake ..
-- The C compiler identification is GNU 4.8.5
-- The CXX compiler identification is GNU 4.8.5
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/jeason/cmake/build
[jeason@centos7 build]$ make
Scanning dependencies of target temp
[ 33%] Building CXX object CMakeFiles/temp.dir/1.cpp.o
[ 66%] Building C object CMakeFiles/temp.dir/2.c.o
[100%] Linking CXX static library libtemp.a
[100%] Built target temp
[jeason@centos7 build]$ ls -l
total 32
-rw-rw-r--. 1 jeason jeason 11687 Dec  5 09:27 CMakeCache.txt
drwxrwxr-x. 5 jeason jeason  4096 Dec  5 09:27 CMakeFiles
-rw-rw-r--. 1 jeason jeason  1353 Dec  5 09:27 cmake_install.cmake
-rw-rw-r--. 1 jeason jeason  2370 Dec  5 09:27 libtemp.a
-rw-rw-r--. 1 jeason jeason  5131 Dec  5 09:27 Makefile
[jeason@centos7 build]$

1.3 生成动态库

cmake_minimum_required(VERSION 3.1.6)
project(myAwesomePrj)add_library( temp SHARED${CMAKE_CURRENT_LIST_DIR}/1.cpp${CMAKE_CURRENT_LIST_DIR}/2.c
)
[jeason@centos7 cmake]$ mkdir build && cd build
[jeason@centos7 build]$ cmake ..
-- The C compiler identification is GNU 4.8.5
-- The CXX compiler identification is GNU 4.8.5
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/jeason/cmake/build
[jeason@centos7 build]$ make
Scanning dependencies of target temp
[ 33%] Building CXX object CMakeFiles/temp.dir/1.cpp.o
[ 66%] Building C object CMakeFiles/temp.dir/2.c.o
[100%] Linking CXX shared library libtemp.so
[100%] Built target temp
[jeason@centos7 build]$ ls -l
total 36
-rw-rw-r--. 1 jeason jeason 11687 Dec  5 09:29 CMakeCache.txt
drwxrwxr-x. 5 jeason jeason  4096 Dec  5 09:29 CMakeFiles
-rw-rw-r--. 1 jeason jeason  1353 Dec  5 09:29 cmake_install.cmake
-rwxrwxr-x. 1 jeason jeason  7912 Dec  5 09:29 libtemp.so
-rw-rw-r--. 1 jeason jeason  5131 Dec  5 09:29 Makefile
[jeason@centos7 build]$
file(GLOB_RECURSE some_prj_src "*${CMAKE_CURRENT_LIST_DIR}.cpp")
file(GLOB_RECURSE some_prj_src "*.cpp")

2. 一些辅助工具

2.1 打印提示信息

cmake_minimum_required(VERSION 3.1.6)
project(myAwesomePrj)
message("hello world .....  ")
[jeason@centos7 build]$ cmake ..
hello world .....
-- Configuring done
-- Generating done
-- Build files have been written to: /home/jeason/cmake/build

2. 辅助查找文件

cmake_minimum_required(VERSION 3.1.6)
project(myAwesomePrj)
file(GLOB_RECURSE file_out_list_c      "*.c")
file(GLOB_RECURSE file_out_list_cpp    "*.cpp")
file(GLOB_RECURSE file_out_list_c_cpp  "*.cpp" "*.c")
message("file find file_out_list_c      = ${file_out_list_c}")
message("file find file_out_list_cpp    = ${file_out_list_cpp}")
message("file find file_out_list_c_cpp  = ${file_out_list_c_cpp}") message("----------------------------------------------------------------------------") foreach(files  ${file_out_list_c})message("----- ${files}")
endforeach()
[jeason@centos7 build]$ cmake ..
file find file_out_list_c      = /home/jeason/cmake/2.c;/home/jeason/cmake/build/CMakeFiles/3.6.2/CompilerIdC/CMakeCCompilerId.c;/home/jeason/cmake/build/CMakeFiles/feature_tests.c
file find file_out_list_cpp    = /home/jeason/cmake/1.cpp;/home/jeason/cmake/build/CMakeFiles/3.6.2/CompilerIdCXX/CMakeCXXCompilerId.cpp
file find file_out_list_c_cpp  = /home/jeason/cmake/1.cpp;/home/jeason/cmake/build/CMakeFiles/3.6.2/CompilerIdCXX/CMakeCXXCompilerId.cpp;/home/jeason/cmake/2.c;/home/jeason/cmake/build/CMakeFiles/3.6.2/CompilerIdC/CMakeCCompilerId.c;/home/jeason/cmake/build/CMakeFiles/feature_tests.c
----------------------------------------------------------------------------
----- /home/jeason/cmake/2.c
----- /home/jeason/cmake/build/CMakeFiles/3.6.2/CompilerIdC/CMakeCCompilerId.c
----- /home/jeason/cmake/build/CMakeFiles/feature_tests.c
-- Configuring done
-- Generating done
-- Build files have been written to: /home/jeason/cmake/build
[jeason@centos7 build]$

还有亿点点细节没写完 有点想不起来了,明天看看代码再做笔记!!!
cmake 是非常强大的! 语法也是清晰易懂的

cmake学习笔记--cmake的打印、创建工程等基本操作(1)相关推荐

  1. STM32F072 Nucleo笔记2-利用STM32CuBeMX创建工程并用按键控制LED的亮灭

    STM32F072 Nucleo学习笔记2-利用STM32CuBeMX创建工程并用按键控制LED的亮灭 本文例子用到: 1.  STM32F072 Nucleo开发板 2.  STM32CubeMX软 ...

  2. CMake学习笔记(一)——CMake官网教程

    CMake学习笔记(一)--CMake官网教程 前言: 经历了一星期痛苦的交叉编译,笔者深刻认知到Linux下make的重要性.所以准备放缓两三天自己的工作进度,并学习一下CMake与Makefile ...

  3. cmake 学习笔记(三) (转)

    接前面的 Cmake学习笔记(一) 与 Cmake学习笔记(二) 继续学习 cmake 的使用. 学习一下cmake的 finder. finder是神马东西? 当编译一个需要使用第三方库的软件时,我 ...

  4. maven 学习笔记(三)创建一个较复杂的 eclipse+android+maven 工程

    前面maven 学习笔记(二)已经说过了怎样通过插件创建一个简单的工程,有了前面的基础,创建一个较复杂的工程就容易了很多.同样是通过已经有了插件,同样如果插件系统中并未存在,还是需要通过Add Arc ...

  5. CMake 学习笔记 02 - 更复杂的项目

    CMake 学习笔记 02 - 更复杂的项目 源代码见 https://github.com/fengyc/cmake-tutorial 源代码目录组织 一般的项目,会划分为多个子目录,每个子目录中包 ...

  6. cmake学习笔记(七)编写自己的xxxConfig.cmake

    cmake学习笔记(七)编写自己的xxxConfig.cmake 1. onnxruntimeConfig.cmake 2. 进阶版onnxruntimeConfig.cmake 1. onnxrun ...

  7. cmake学习笔记(五)

    cmake学习笔记(五) 添加系统检测 检测代码环境中是否存在某些库文件,在MathFunctions/CMakeLisits.txt添加如下代码: include(CheckSymbolExists ...

  8. V-rep学习笔记:机器人模型创建2—添加关节

    下面接着之前经过简化并调整好视觉效果的模型继续工作流,为了使模型能受控制运动起来必须在合适的位置上添加相应的运动副/关节.一般情况下我们可以查阅手册或根据设计图纸获得这些关节的准确位置和姿态,知道这些 ...

  9. ASM学习笔记2 - 类的创建和修改 —— ClassWriter的综合应用

    ASM学习笔记2 - 类的创建和修改 -- ClassWriter的综合应用 上回我们说到,通过使用ClassVisitor和ClassReader,我们能够分析已经存在的类.这一节中,我们将使用Cl ...

最新文章

  1. SVM支持向量机——核函数、软间隔
  2. android自定义相机预览尺寸,相机在Android中,如何获得最佳尺寸,预览尺寸,图片尺寸,视图尺寸,图像扭曲...
  3. 你遇到过哪些理工科的实验高手,他们有哪些优秀的思维习惯?
  4. Java 设计模式——外观模式
  5. LIVE555再学习 -- 初识
  6. java中怎么判断一段代码时线程安全还是非线程安全_24张图带你彻底理解Java中的21种锁...
  7. Oracle 11g Dataguard搭建及知识梳理
  8. 【前端】第一章 前端三要素、前后端分离的演变史
  9. android 9.0的模拟器,Exagear模拟器最新版
  10. Python入门--集合的创建,set(),{}
  11. AI公开课丨胡伟:基于表示学习的知识图谱实体对齐研究
  12. python 加速方法_加速Python的几种方法
  13. android媒体--stagefright概述
  14. Numpy中take的用法
  15. 可调光的LED驱动解决方案
  16. 快速理解论文主旨框架:论文十问法
  17. Nginx缓存静态文件
  18. 软件测试实习生 带人计划 Plan for Training Inten
  19. [arch Linux] 使用grub实现Linux和Windows双系统的引导
  20. 循环冗余检验CRC原理

热门文章

  1. spring 项目启动完成执行_凝聚合力形成攻坚之势——21天顺利完成启动炉烟道改造施工项目...
  2. 专访天冕科技许文彬:以超5000万用户为基础,构建完善的隐私计算数据应用生态
  3. Spring Boot 入门系列(二十八) JPA 的实体映射关系,一对一,一对多,多对多关系映射!...
  4. YUV2RGB Opencv
  5. 为pr视频文件添加字幕
  6. laravel 模型局部不更新updated_at字段
  7. android app增加内存大小,硬件不够软件来凑:如何提升Android手机运行内存?
  8. 快速学习编程语言,快速高效的入门
  9. 利用Java反射机制调用含数组参数的方法
  10. 感知融合(六):运动补偿算法计算目标绝对速度