官网tutorials https://cmake.org/examples/
1 make 和 cmake
很多C++开源库下载下来要安装使用,都会有make的过程,比如glog、protobuf
- make: cpp-->编译-->可执行文件,make就是编译的工具,且需要一个叫『makefile』的文件清晰描述如何构建程序。优点:(1)用户不需要知道构建过程,直接make即可;(2)使得改变一点点代码后重新编译整个程序变得更高效。
- cmake:"cross platform make",顾名思义,支持跨平台make,自动根据平台识别该用什么编译器。优点:(1)CMakefile可读性强;(2)可使用make命令;(3)支持多个IDE如Xcode, Eclipse, Visual Studio, etc。
2 如何使用cmake
$> ccmake directory ## 配置编译选项,如项目目录,一般这步可省略。
$> cmake directory ## 根据 CMakeLists.txt 生成 Makefile 文件
$> make ## make 命令
3 CMakefile.txt
cmake要求工程 主目录 和 源代码子目录 下都要编写CMakefile.txt文件,注意大小写。举个栗子(参考)
- 一个简单的工程
.
├── CMakelists.txt
├── include
│ └── pow.h
└── src
├── main.c
└── pow.c
2 directories, 4 files
pow.h
#ifndef POW_H
#define POW_H
#include <math.h>
double calc_pow(double x, double y);
#endif
pow.c
#include "pow.h"
double calc_pow(double x, double y) {
return pow(x, y);
}
main.c
#include <stdlib.h>
#include <stdio.h>
#include "../include/pow.h"
int main(int argc, char const *argv[])
{
if (argc < 3) {
printf("Error arg count!\n");
return -1;
}
double result = calc_pow( atof(argv[1]), atof(argv[2]) );
printf("pow result = %f\n", result);
return 0;
}
CMakelists.txt
## 指定允许执行的最低 CMake 版本要求;不写会出警告
cmake_minimum_required( VERSION 2.8 )
## 指定项目的名称,通常对应于项目文件夹名
project( SAMPLE_SINGLE_DIR )
## 指定引用目录
include_directories( include )
## 自动构建源文件目录
aux_source_directory( src DIR_SRCS )
## 指定编译目标文件
add_executable( demo ${DIR_SRCS} )
## 添加链接库,相同于指定-l参数(此处没有用到)
#target_link_libraries(${PROJECT_NAME} m) #比如我们用到了libm.so(命名规则:lib+name+.so)
make一下
$ mkdir build
$ cd build/
$ cmake ..
......
-- Build files have been written to: /Users/XXOO/Documents/cmake-samples/smaple-1/build
XXOO:build$ make
Scanning dependencies of target demo
[ 33%] Building C object CMakeFiles/demo.dir/src/main.c.o
[ 66%] Building C object CMakeFiles/demo.dir/src/pow.c.o
[100%] Linking C executable demo
[100%] Built target demo
$ ls
CMakeCache.txt CMakeFiles Makefile cmake_install.cmake demo
运行
$ ./demo
Error arg count!
$ ./demo 2 3
pow result = 8.000000
$ ./demo 3 2
pow result = 9.000000
附
推荐阅读:
对于CMakeFile.txt的指令解释的很齐全,又附带例子
- CMake搭建项目工程(1)-C/C++编译及CMake那些事:解释动态库&静态库,介绍常用指令
- CMake搭建项目工程(2)-CMake控制命令、函数与宏、安装、模块:其他常用命令,并给一个例子介绍如何编译静态库,并编译可执行文件来引用这个静态库
网友评论