1、ubuntu下cmake的下载安装
命令行进行软件包下载;
sudo su
apt-get update
apt install cmake
安装成功后查看版本信息如下。
2、单文件工程的编译
项目结构:
main.cpp:
include <iostream>
using namespace std;
int main(){
cout << "Hello!" << endl;
return 0;
}
CMakeLists.txt:
#cmake required lowest version
cmake_minimum_required(VERSION 3.0)
#programs
project(demo)
#executive file
add_executable(main main.cpp)
进入到当前文件夹下,调用cmake:
cmake .
产出文件如下:
使用make;
make
等同于用makefile进行编译;
到此可以执行目标文件 ./main
3、多文件工程的编译
项目中文件如下;
fun.cpp:
#include <stdio.h>
#include "fun.hpp"
void fun(int x){
printf("<fun>x:%d\n",x);
}
3、优越性
3.1 在某个目录下打包目的源文件
将当前目录下的所有源文件存列表存放在变量 SRC_LIST 里面,对于该变量进行调度比起列出依赖文件的做法就更加方便。
aux_source_diretory()会打包目录文件夹下的全部源文件,我们可以使用set来存放目的的源文件。
set(SRC_LIST ./main.cpp ./fun.cpp ./fun.hpp)
add_executable(main ${SRC_LIST})
3.2 不同目录下有多个源文件
include_diretories ()
可以指定多个路径下的文件作为源文件添加到目标工程中。
cmake_minimum_required(VERSION 3.0)
project(demo)
include_directories (ta tb)
aux_source_directory(ta SRC_LIST0)
aux_source_directory(tb SRC_LIST1)
add_executable(main main.cpp ${SRC_LIST0} ${SRC_LIST1})
3.3 添加编译子目录
add_subdirectory()
可以添加编译字目录。
项目文件结构如下:
src下的CMakeLists.txt:
aux_source_directory(. SRC_LIST)
include_directories(../include)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
add_subdirectory(main ${SRC_LIST})
cmake_4下的CMakeLists.txt:
cmake_minimum_required(VERSION 3.0)
project(demo)
add_subdirectory(src)
3.5 其他功能
- 生成库文件add_library()、set_target_properties()
- 链接时用findliabrary()查找库是否存在;
- 条件编译;
- CJson链接库;
- 调试。