7.1前言
1.Cmake是一个跨平台的安装编译工具,可以使用简单的语句来描述所有平台的安装(编译过程)
2.Cmake可以说是已经成为大部分的c++开发项目的标配
3.可以使用几行或者几十行的代码来完成非常冗长的makefile代码
7.2为什么要使用cmake
1.在不使用cmake时,编译工程如下
2.在上面的机制中,工程文件中添加一个bar.cpp
3.使用Cmake来管理工程的状态
4.使用cmake管理工程中添加一个新闻界bar.cpp
7.3语法特定介绍
1.基本语法:指令(参数1 参数2..)
参数使用括号括起来
参数直接使用空格或分号隔开
2.注意:指令是我大小写无关的,但是参数和变量是大小写相关的
set(HELLO hello.cpp) #定义一个变量名叫HELLO 变量的值为hello.cpp
add_executable(hello main.cpp hello.cpp) #通过main.cpp 和hello.cpp编译生成hello可执行程序
ADD_EXECUTABLE(hello main.cpp ${HELLO}) #作用同上
3.变量使用${}进行取值,但是在if控制语句中,是直接使用变量名的
if(HELLO)是正确的
if(${hello})是不正确的
4.语句不以分号结束
7.4重要的指令和cmake常用变量
1.cmake_mininum_required:指定cmake的最小版本支持,一般作为第一条cmake指令
#cmake设置最小支持版本为2.8
cmake_mininum_required(VERSION)
2.project:定义工程的名字,并可以指定工程支持的语言
#指定工程的名称为HELLOWORLD
project(HELLOWORLD CXX) #表示工程名为HELLOWOELD 使用的语音为c++
3.set:显示定义变量
# 定义变量 SRC 其值 sayhello.cpp hello.cpp
set(SRC sayhello.cpp hello.cpp)
4.add_executable:通过依赖生成可执行程序
#编译main.cpp 生成main的可执行程序
add_executable(main main.cpp)r
5.include_directories:向工程添加多个特定的头文件搜索路径,类似于g++编译指令中的-l
3将/user/lib/mylibfolder和 ./include添加到工程路径中
include_directories(/user/lib/mylibfolde ./include)
6.link_directories:向工程中添加多个特殊的库文件搜索路径,类似于g++编译指令的-L选项
3将/user/lib/mylibfolder和 ./lib添加到库文件搜索路径中
link_directories(/user/lib/mylibfolde ./lib)
7.add_library:生成库文件(包括动态库和静态库)
#通过SRC 变量中的文件,生成动态库
abb_library(hello SHARED ${SRC)) #动态库
abb_library(hello STATIC ${SRC)) #静态库
8.add_compile_options:添加编译参数
#添加编译参数 -wall -std=c++
add_compile_options(-wall -std=c++11)
9.target_link_libraries:为target添加需要链接的共享库.类似于g++编译中-l
#将hello动态库链接到可执行程序main中
target_link_libraries(main hello)
7.5Cmake变量
1.CMAKE_C_FLAGS:gcc编译选项的值
2.CMAKE_CXX_FLAGS:g++编译选择的值
#在CMAKE_CXX_FLAGS编译选项后追加-std=c++11
set(CMAKE_CXX_FLAGS"${CMAKE_CXX_FLAGS} -std=c++"
3.CMAKE_BUILD_TYPE:编译类型(debug\release)
#设定编译类似为Debug,调试时需要选择该模式
set(CMAKE_BUILD_TYPE Debug)
#设定编译类似为Release,调试时需要选择该模式
set(CMAKE_BUILD_TYPE Release)