目录
简介
1. Cmake的基本语法
2. 常用指令
3. CMake常用的变量
4. CMake编译工程
5. 构建方式
6. 实战---CMake代码实战
不同平台编译项目工程文件是不同的,如在Visual Studio下,需要msbuild文件,在linux下需要编写Makefile文件,所以一个工程在不同的平台需要编写多个编译文件。 但是有了cmake工具后,我们只需要编写CMakeLists.txt文件就可以解决跨平台编译的问题。
假设一个工程新增添了一个文件bar.cpp,如果我们在linux编译,我们就需要手写makefile文件,如果在VS下编译,就需要写msbuild文件。如下:
但是有了cmake工具后,我们只需要编写CMakeLists.txt文件,cmake会根据不同的平台生成对应的编译文件,如果在linux下,cmake就会根据CMakeLists.txt产生对应的makefile文件。
例如:
add_excutable(hello main.cpp hello.cpp)
ADD_EXCUTABLE(hello main.cpp hello.cpp)
cmake_minimum_required(VERSION 2.8.3) #指定cmake的最小版本是2.8.3版本
project(main) #定义工程名为hello
project(main[c][java])#定义工程名为hello,且支持的语言为c和java
set(SRC main.cpp hello.cpp) #设置SRC变量为main.cpp hello.cpp
link_directories相当于g++编译器中指定头文件中的-i选项
#将/usr/lib/mylibfolder ./lib添加到库文件的搜索路径中
link_directories(/usr/lib/mylibfolder ./lib)
add_compile_option(-std=c++11)#添加编译参数 -std=c++11
add_compile_option(-wall -std=c++11)#添加编译参数 -Wall -std=c++11
语法:
add_executable(目标文件 源文件 源文件)
例子:
add_executable(main main.cpp) #编译main.cpp生成可执行文件main
add_executable(main main.cpp add.cpp) #编译main.cpp add.cpp生成可执行文件main
#也可以用一个变量来表示多个源文件
set(SRC_LIST a.cpp b.cpp c.cpp)
add_executable(${PROJECT_NAME} ${SRC_LIST})
#PROJECT_NAME 是设置的工程工程名称
target_link_libraries(main hello)#将hello动态库添加需要链接的共享库中
CMAKE_C_FLAGS gcc编译选项
CMAKE_CXX_FLAGES g++编译选项
#在CMAKE_CXX_FLAGES 中选项后追加-std=c++11
set(CMAKE_CXX_FLAGES ,"${CMAKE_CXX_FLAGES} -std=c++11")
#设定编译类型为debug,如果要对项目进行调试,需要将CMAKE_BUILD_TYP设置为Debug类型
set(CMAKE_BUILD_TYPE Debug);
#设定编译类型为realse
set(CMAKE_BUILD_TYPE Realse);
在项目主目录下需要存在一个CMakeLists文件
两种方式设置编译规则:
包含源文件的子文件夹包含CMakeLists.txt文件,主目录的CMakeLists.txt通过add_subdirectory添加子目录即可
包含源文件的子文件夹未包含CMakeLists.txt文件,子目录编译规则体现在主目录的CMakeLists.txt中。
在linux平台下使用CMake构建C/C++工程的流程如下:
手动编写CmakeLists.txt
执行cmake PATH 生成Makefile(PATH是CMakeLists.txt所在的目录)
执行命令make进行编译
内部构建会在同级目录下产生一堆中间件文件,这些中间文件并不是我们想要的,和工程文件放在一起会显得杂乱无章。
#在当前目录下,编译本目录CMakeLists.txt 生成Makefile和其他文件
cmake .
#执行make指令,生成target
make
将编译文件和源文件放在不同的目录下
mkdir build
#进入到build文件夹中
cd build
#编译上级目录的CMakeLists.txt,生成Makefile和其他文件
cmake ..
#执行make命令,生成target
make
编写 CMakeLists.txt文件使add.c和main.c文件生成main可执行文件
main.cc文件:
#include
using namespace std;
int main()
{
cout<
add.hpp文件
#include
int add(int x,int y);
add.cc文件
#include
int add(int x,int y);
编写需要在源文件下创建CMakeLists.txt文件
CMakeLists.txt文件内容:
cmake_minimum_required(VERSION 2.8.12.2) #最低版本号
project(main) #项目名称
set(CMAKE_BUILD_TYPE Debug); #设置编译类型为Debug
add_executable(${PROJECT_NAME} main.cc add.cc) #编译文件
接下来再创建一个build目录,并进入build目录并执行 cmake .. ,那么在build目录下就会产生4个文件,其中包括一个Makefile文件。
在执行make就会在build目录下生成main文件