1、在Windows下使用命令行进行编译,命令行不好使,各种报错。
原因是:cmake在默认情况使用的是vs的东西,需要自己指定为mingw的,如下:

  1. cmake -G "MinGW Makefiles" ..
  2. mingw32-make -j 8 // 提升速度用的
  3. 要把后者放到环境变量(mingw/bin/)
  4. windows下使用的make就是mingw32-make

gcc、make、Makefile、CMake 与 CMakeLists

  1. gcc(GNU Compiler Collection)可以看成是GNU编译器套件,可以编译C、C++、Objective-C、Java等多种编程语言。
    当程序中只有很少个原文件时,可以直接使用gcc进行编译。但是当程序中包含很多个源文件时,使用gcc命令逐个文件编译的工作量很大且容易出错。
    这时候就可以借助make工具进行“批量”编译和链接。
    2. make本身不具有编译和链接的功能,而是类似于一个智能的批处理工具,通过调用Makefile文件中用户指定的命令进行编译和链接。
    3. Makefile文件中定义了一套调用gcc编译源文件的命令。简单工程的Makefile文件可以手动编写,当工程比较大的时候手动编写Makefile文件也很麻烦,并且Makefile中的指令是平台相关的,换个平台还需要再修改。
    这时候就可以使用CMake工具自动生成Makefile文件。
    4. CMake工具可以以更加简单的方式自动生成Makefile文件,跨平台时只需要告诉CMake目标平台类型,就可以自动生成目标平台可使用的Makefile文件。
    CMake依赖(或根据)CMakeLists.txt文件自动生成Makefile。
    5. CMakeLists.txt需要手动编写。
    CMake工具和CMakeLists.txt是一对好基友, make工具和Makefile是另一对好基友。
    CMake要解决的问题是项目要在不同平台不同编译器下都可以依据一个统一的脚本(CMakeLists.txt)进行构建的问题。忽略不同平台的差异,抽象成为一个一致的环境。
    make要解决的问题是在一个特定的平台环境上依据当前平台的脚本(Makefile),调用gcc(或其他编译器)对源文件进行批量编译链接的问题。

    CMake是一个比make更高级的编译配置工具,它可以根据不同平台、不同的编译器,生成相应的Makefile,达到一个编写,多环境编译的效果。
    所以使用CMake编写一个跨平台的工程的基本流程是:
  • 1. 编写代码源文件
  • 2. 编写CMakeLists.txt(依据CMake的语法规格和格式)
  • 3. 使用CMake工具根据CMakeLists.txt生成Makefile
  • 4. 使用make工具根据Makefile,调用gcc编译链接生成可执行目标文件