• [CMake笔记] 初识CMake


    与CMake相遇

           做C/C++的人都应该经历过,以往拿到一个开源代码,想自己编译出来,总会因为VS的版本不同而出现各种各样的问题,使编译过程困难重重,更多时候就会放弃使用它了。而这个过程反过来,也会使用一些开源项目难于推广。

           另外,基于我的跨平台开发经历,更是一个灾难。刚毕业那会,我有一个项目是Windows下开发,但服务器是Ubuntu的,当初我是在windows下的VS2015开发,调试得没问题了,还要上传到服务器,再根据其环境写各种makefile

           两年前吧,接触到OpenCV,看到里面竟然是使用CMakeLists.txt这个脚本,通过CMake程序就可以生成相应平台的编译工程了,简直太方便了。

    CMake的HelloWorld

    文件结构

    helloworld
      |--CMakeLists.txt
      |--helloworld.cpp

     CMakeLists.txt

     1 # CMake 最低版本号要求
     2 cmake_minimum_required(VERSION 3.0)
     3 
     4 # 指定项目名称,其实就是给变量PROJECT_NAME赋值
     5 project(HelloWorld)
     6 
     7 # 查找指定目录下的所有源文件 并存放到指定变量名SRC中
     8 aux_source_directory(. SRC)
     9 
    10 # 指定生成目标
    11 add_executable(${PROJECT_NAME} ${SRC}

     helloworld.cpp

    因为现在的工作基本上是windows下的VS开发,所以我对于源文件与头文件的编写都会用CMake生成后,在VS里面再编写。

     生成VS解决方案

    CMake中

    在选择【Specify the generator for this project】时,要注意一下所选的编译平台是32位还是64位的,若需要两种平台的则要创建两个解决方案的。

    结果

    总结

    缺点

    1. 需要学习如何编写CMakeLists.txt,需要一点点学习成本;
    2. 每次添加源文件或头文件等,需要在源码文件夹下创建,可能还需要修改一下CMakeLists.txt,再到CMake中生成一下,不可直接在VS里添加哦!1
    3. 在这个章节中的实例中,使用的一些文件还是很初级的,如aux_source_directory函数只能查找源文件,头文件就没法添加到解决方案里,这给后期的修改带来了不小的麻烦,后期会再详说;
    4. 暂时没有了。

    优点

    1.  实现了跨平台编译的管理,不需要再重复编写大量的编译脚本了。个人用起来还是很方便的
    2. 实现在使用Git或SVN时,对代码文件的纯洁管理,不会被提交与代码无关的工程文件(这是我个人的强迫症,被治愈了)

    此纯属个人学习笔记,有错可以指正!

  • 相关阅读:
    什么是根文件系统
    构建基本的嵌入式Linux根文件系统
    “文件系统”与“根文件系统”详解
    C#中NameValueCollection类用法详解
    别把西红柿连续种在同一块地里
    asp.net 服务器控件的 ID,ClientID,UniqueID 的区别
    不要为框架作过多的假设
    构件技术
    asp.net中控件id,clientid,uniqueid的区别
    系统架构图怎么画
  • 原文地址:https://www.cnblogs.com/dilex/p/11074589.html
Copyright © 2020-2023  润新知