一、CMake介绍
CMake是一种跨平台的构建工具,通过CMakeLists.txt 文件的编写来实现,其中CMakeLists.txt 文件主要用于生成 Makefile文件(通过“cmake PATH”命令),Makefile文件再通过make 命令进行编译,整个构建过程如下:
- 编写CmakeLists.txt。
- 执行“cmake PATH”命令生成 Makefile文件(PATH 是 CMakeLists.txt 文件所在的路径)。
- 执行make 命令生成可执行文件。
二、简单实例
源文件 main.cpp
#include<iostream>
using namespace std;
int main()
{
cout<<"Hello Cmake!"<<endl;
return 0;
}
CMakeLists.txt文件
# 该命令表示项目的名称是 Main
PROJECT(Main)
# 限定了 CMake 的版本
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
# 将当前目录中的源文件名称赋值给变量 DIR_SRCS,格式为aux_source_directory(<dir> <variable>)
AUX_SOURCE_DIRECTORY(. DIR_SRCS)
# 将变量 DIR_SRCS 中的源文件编译成可执行文件main
ADD_EXECUTABLE(main ${DIR_SRCS})
执行命令:
(1)在 main.cpp 所在的目录执行 cmake .
(2)执行make
三、多源文件目录实例
(1)主目录
源文件 main.cpp
#include"src/Test.h"
#include<iostream>
using namespace std;
int main()
{
printTest();
cout<<"Hello Cmake!"<<endl;
return 0;
}
外层文件CMakeLists.txt
PROJECT(main)
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
# 命令 ADD_SUBDIRECTORY 表明项目包含一个子目录 src
ADD_SUBDIRECTORY( src )
AUX_SOURCE_DIRECTORY(. DIR_SRCS)
ADD_EXECUTABLE(main ${DIR_SRCS} )
# 命令 TARGET_LINK_LIBRARIES 表明可执行文件 main 需要连接Test库
TARGET_LINK_LIBRARIES( main Test )
补充:程序执行命令 ADD_SUBDIRECTORY( src ) 时会进入子目录 src ,然后执行子目录的 CMakeLists.txt 生成Test库 (子目录的 CMakeLists.txt中编写了库名为Test)
(2)子目录src
源文件Test.cpp
#include"Test.h"
#include<iostream>
using namespace std;
void printTest()
{
cout<<"I am TEST!"<<endl;
}
头文件Test.h
#ifndef _TEST_H_
#define _TEST_H_
void printTest();
#endif _TEST_H_
内层文件CMakeLists.txt
AUX_SOURCE_DIRECTORY(. DIR_TEST_SRCS)
# 命令 ADD_LIBRARY 将 src 目录中的源文件编译为共享库Test
ADD_LIBRARY ( Test ${DIR_TEST_SRCS})
执行命令:
(1)在主目录中执行 cmake .
(2)执行make