为何要使用项目构建工具
cmake和autotools正是makefile的上层工具,它们的目的正是为了产生可移植的makefile,并简化自己动手写makefile时的巨大工作量。如果你自己动手写过makefile,你会发现,makefile通常依赖于你当前的编译平台,而且编写makefile的工作量比较大,解决依赖关系时也容易出错。因此,对于大多数项目,应当考虑使用更自动化一些的 cmake或者autotools来生成makefile,而不是上来就动手编写。
总之,项目构建工具能够帮我们在不同平台上更好地组织和管理我们的代码及其编译过程,这是我们使用它的主要原因。
cmake的主要特点
cmake和autotools是不同的项目管理工具,有各自的特点和用户群。存在即为合理,因此我们不会对两者进行优劣比较,这里只给出cmake的一些主要特点:
1.开放源代码,使用类 BSD 许可发布。
2.跨平台,并可生成 native 编译配置文件,在 Linux/Unix 平台,生成 makefile,在 苹果平台,可以生成 xcode,在 Windows 平台,可以生成 MSVC 的工程文件。
3.能够管理大型项目,KDE4 就是最好的证明。
4.简化编译构建过程和编译过程。Cmake 的工具链非常简单:cmake+make。
5.高效率,按照 KDE 官方说法,CMake 构建 KDE4 的 kdelibs 要比使用 autotools 来 构建 KDE3.5.6 的 kdelibs 快 40%,主要是因为 Cmake 在工具链中没有 libtool。
6.可扩展,可以为 cmake 编写特定功能的模块,扩充 cmake 功能。
Linux下CMake的安装及简单使用
暂时用的ubuntu12.04
首先cmake -version查看下系统安装了没有,
$ cmake -version
The program 'cmake' is currently not installed. You can install it by typing:
sudo apt-get install cmake
没有的话继续安装
$ sudo -s
[sudo] password for gec:
root@#
root@# sudo apt-get install cmake
root@# cmake -version
cmake version 2.8.7
恭喜安装成功了
在工作目录下编写一个.c程序
root@ubuntu:/mnt/hgfs/D/workmy/512019/linuxC/strlen# vi strlenfile.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>int c;int main()
{char *s="abcd";char t[]="abcd";char b[100]="abcd";printf("char *s sizeof(s)=%d, strlen(s)=%d \n ",sizeof(s),strlen(s));printf("char t[] sizeof(t)=%d, strlen(t)=%d \n ",sizeof(t),strlen(t));printf("char b[100] sizeof(b)=%d, strlen(b)=%d \n ",sizeof(b),strlen(b));printf("%d \n \t",sizeof c );return 0;
}
在.c目录创建一个新的文件CMakeLists.txt,它就是 cmake所处理的“代码“。其实,使用cmake管理项目本身也是在编程,所以称之为“代码(或脚本)”并不为过。在CMakeLists.txt文件中输入下面的代码(#后面的内容为代码行注释):
#cmake最低版本需求,不加入此行会受到警告信息CMAKE_MINIMUM_REQUIRED(VERSION 2.6)PROJECT(HELLO) #项目名称#把当前目录(.)下所有源代码文件和头文件加入变量SRC_LISTAUX_SOURCE_DIRECTORY(. SRC_LIST)#生成应用程序 hello (在windows下会自动生成hello.exe)ADD_EXECUTABLE(hello ${SRC_LIST})
至此,整个hello项目就已经构建完毕,可以进行编译了。
为了使用外部编译方式编译项目,需要先在目录下新建一个目录build(也可以是其他任何目录名)。
在linux命令行下,首先进入目录build,然后运行命令(注:后面的“..”不可缺少):cmake..
该命令使cmake检测编译环境,并生成相应的makefile。接着,运行命令make进行编译。编译后,生成的所有中间文件和可执行文件会在build目录下。面是我在ubuntu上的运行过程:
参考:https://www.cnblogs.com/shine-yr/p/5214764.html
本文链接:https://my.lmcjl.com/post/14708.html
4 评论