一)概述
make和cmake都是代码自动编译工具,本身不含编译器。
简单的编译可以直接用编译器进行,如:
gcc -c demo.c
g
++ main.cpp -Ie:\Qt\4.7.0\include -o main -Le:\Qt\4.7.0\lib -lQtCore4
二) make/nmake/mingw32-make
make是一个自动化编译工具,它本身并没有编译和链接的功能,而是用类似于批处理的方式—通过调用makefile文件中用户指定的命令来进行编译和链接的。
makefile是make实现编译需要的规则文件,make依据它来批处理编译,makefile的语法:https://blog.youkuaiyun.com/u013216061/article/details/70592461
makefile在一些简单的工程完全可以人工手写,但是当工程非常大的时候,手写makefile是非常麻烦的,如果换了个平台makefile又要重新修改。
make是linux环境下的命令,也被称为GNU Make,Windows环境下无此命令。
在Windows环境下可以用nmake进行编译,方法是先进入x86/64 native command propmt for vs命令行终端,再用nmake。值得注意的是,nmae是microsoft为VS设计的,其中的许多语法、隐含宏定义名称等与gnu make是不同的。主要差别参见:https://blog.youkuaiyun.com/tsaiyong_ahnselina/article/details/17554337
在Windows环境下使用MinGW32/64时,相应的make命令为mingw32-make。
三)cmake/qmake
cmake是make maker,生成各种可以直接控制编译过程的控制器的配置文件,比如makefile、各种IDE的配置文件。
CMake创建工程之前要有CMakeList.txt,该文件的语法见https://blog.youkuaiyun.com/afei__/article/details/81201039
Windows 上的CMake有两个版本:命令行和CMake-GUI
1)命令行下使用cmake
(1)对于简单场景,可直接 cmake <path>进行编译,直接编译生成结果。其中<path>为CMakeLists.txt所在路径
(2)可用-G命令指定生成器
(3)每次都用”-G”选项指定生成器比较麻烦,可以将其配置在”PreLoad.cmake”文件中。在CMakeLists.txt所在目录下新建文件”PreLoad.cmake”。例如,可输入:
set(CMAKE_GENERATOR "NMake Makefiles" CACHE INTERNAL "" FORCE)
然后执行"cmake ."
即可配置,然后执行"nmake"
就可以编译。
2)CMake-GUI
CMake-GUI编译工程一般分为3步:
(1)configure: 配置参数
(2) generate:生成可编译工程,要指定编译器、架构等,相当于命令行的 -G
(3) build: 依据上一步所选编译器进行编译
3)对不同编译器cmake的自动生成文件
cmake可选用的编译器很多,具体的可参看 cmake-gui的提示。面向几个主要的编译器自动生成的文件如下:
(1)所有的编译器
均会在工程目录下生成CMakeFiles目录和CMakeCache.txt,cmake_install.cmake文件
(2)nmake编译器
生成Makefile文件,可直接用nmake进行编译
3)Visual studio 20**
会生成一个项目文件 <proj>.sln和若干个工程文件,一般包括ALL_BUILD.*(用于编译项目内的所有工程), ZERO_CHECK.*(用于检查CMakeList.txt是否改变),和CMakeLists.txt中定义的所有待输出的工程。可以直接用VS打开*.sln文件进行编译
也可以用 cmake --build . 进行编译
(4)ninja
生成build.ninja文件, 可直接用 ninja进行编译
(5)MinGW
生成MinGW Makefiles
4) cmake与VS
如果在装vs2017的时候勾选了cmake,点击新建->项目时会出现cmake选项,可建立cmake工程文件夹。
5)qmake
qmake 是为 Qt 量身打造的类似cmake的makefile生成工具, 在Qt下使用起来非常方便,但功能没有cmake强大。
qmake 需要一个 .pro 文件:,例如:
CONFIG += qt
QT -= gui
SOURCES += main.cpp