1.gcc是GNU Compiler Collection(就是GNU编译器套件),也可以简单认为是编译器,它可以编译很多种编程语言(括C、C++、Objective-C、Fortran、Java等等)。
2.当你的程序只有一个源文件时,直接就可以用gcc命令编译它。
3.但是当你的程序包含很多个源文件时,用gcc命令逐个去编译时,你就很容易混乱而且工作量大
4.所以出现了make工具
make工具可以看成是一个智能的批处理工具,它本身并没有编译和链接的功能,而是用类似于批处理的方式—通过调用makefile文件中用户指定的命令来进行编译和链接的。比如一个makefile文件:
SUBDIR=src xml #定义变量
SUBDIR+= osapi #追加字符串
PWD=$(shell pwd) #使用内部函数
CXX_SOURCE=$(wildcard ./*.cpp)#同上
hello:main.cpp normal.cpp other.cpp normal.hpp other.hpp
#目标:依赖
echo $@ #打印目标
echo $^ #打印依赖项
echo $< #打印依赖项的第一项
g++ -c main.cpp -o main.o
g++ -c normal.cpp -o normal.o
g++ -c other.cpp -o other.o
g++ main.o normal.o other.o -o hello
clean:
rm -rf *.o
test1:
echo $(SUBDIR) #打印变量值,小括号必须
test2:
@echo $(PWD) #加@后,执行时,在终端不显示该命令行,而是直接显示结果
test3:
echo $(CXX_SOURCE) #显示源文件名单
命名:
makefile 或 Makefile
5.makefile是什么?
make工具就根据makefile中的命令进行编译和链接的。makefile命令中就包含了调用gcc(也可以是别的编译器)去编译某个源文件的命令。
6.makefile在一些简单的工程完全可以人工手下,但是当工程非常大的时候,手写makefile也是非常麻烦的,如果换了个平台makefile又要重新修改。
7.这时候就出现了Cmake这个工具,Cmake就可以更加简单的生成makefile文件给上面那个make用。当然cmake还有其他功能,就是可以跨平台生成对应平台能用的makefile,你不用再自己去修改了。
可是cmake根据什么生成makefile呢?它又要根据一个叫CMakeLists.txt文件(学名:组态档)去生成makefile。
10.到最后CMakeLists.txt文件谁写啊?亲,是你自己手写的。
11.当然如果你用IDE,类似VS这些一般它都能帮你弄好了,你只需要按一下那个三角形
作者:辉常哥
链接:http://www.zhihu.com/question/36609459/answer/89743845
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
cmake
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。只是 CMake 的组态档取名为 CmakeLists.txt。Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一般的建构方式使用。
最后,CMakeLists.txt文件如何书写和使用呢,网上很多案例,比如https://www.cnblogs.com/cv-pr/p/6206921.html 在这里就不展开说明啦。