一、关于C语言的编译过程
预编译
编译
链接
1.-E预编译
gcc –E 参数代表预编译
gcc -o a1.c -E a.c
预编译a.c,预编译之后的文件名叫a1.c
预编译功能之一:将#include包含的头文件做简单的文本替换
在C语言中#开头的语句又叫预编译指令
预编译功能之二:将代码中的注释删除
2.-c编译
编译的作用是把文本的c语言编译为二进制的指令
gcc -o a.o -c a1.c
编译a11.c,编译后的文件名叫a.o
3.链接
C语言写的程序是需要依赖各种库的,所以编译之后还需要把库链接到最终的可执行程序中去
gcc没有单独的链接参数
gcc -o a a.o
链接a.o,最后生成的文件叫a
二、关于make
make是一个自动化编译工具,你可以使用一条命令实现完全编译。但是你需要编写makefile,make命令会去找到makefile文件并执行。
三、关于makefile
1. 一个规则
目标:依赖
命令
2. 两个函数
查找文件:src = $(wildcard ./*.c)
匹配替换:obj = $(patsubst %.c, %.o, $(src))
3. 三个自动变量
$@: 目标
$^: 全部的依赖
$<: 依赖中的第一个
三、关于cmake
CMake是一个比make更高级的编译配置工具,它可以根据不同平台、不同的编译器,生成相应的Makefile或者vcproj项目。通过编写CMakeLists.txt,可以控制生成的Makefile,从而控制编译过程。CMake自动生成的Makefile不仅可以通过make命令构建项目生成目标文件,还支持安装(make install)、测试安装的程序是否能正确执行(make test,或者ctest)、生成当前平台的安装包(make package)、生成源码包(make package_source)、产生Dashboard显示数据并上传等高级功能,只要在CMakeLists.txt中简单配置,就可以完成很多复杂的功能,包括写测试用例。如果有嵌套目录,子目录下可以有自己的CMakeLists.txt。
四、关于qmake
qmake能够自动生成Makefile、Microsoft Visual Studio 专案文件和 xcode 专案文件。不管源代码是否是用Qt写的,都能使用qmake,因此qmake能用于很多软件的构建过程。他会根据.pro文件的配置情况来生长Makefile。
五、关于cmakelist.txt(转载自http://blog.csdn.net/gxuan/article/details/7701035)
CMakeListserv.txt的写法
1.要求CMake根据指定的源文件生成可执行文件
add_executable(hello main.cpp)
add_executable(demo main.cpp main.h main.rc)这奖使用main.cpp源文件,main.h文件,main.rc文件构造可执行文件。至于如何使用这些文件,CMake比我们都清楚。
2.调试CMakeLists.txt的办法
MESSAGE(“俺们正在生成项目文件”):会显示一个警告框。
MESSAGE(STATUS “俺们正在创建项目文件”):遇到这条指令,会把文字显示在状态栏里面(一闪而过,不容易发现)。
MESSAGE(FATAL_ERROR “严重错误,俺们搞不定啦”):这条指令会提示出错,并退出。
3.使用标准模块
cmake提供了很多标准模块,扩展名都是txt我们可以直接包含进来。就像使用C语言的#include指令一般。比如:
INCLUDE(FindBoost)
一句话,就告诉了CMake“我们的程序需要Boost”。
4.使用变量 .
SET( MY_SOURCES main.cpp widget.cpp)
MESSAGE(STATUS “my sources: MYSOURCES")使用SET()命令