CMakeLists.txt文件
单个文件
# 设置cmake最小版本
cmake_minimum_required(VERSION 3.10)
# 设置工程名称和版本
project(Tutorial VERSION 1.0)
# 指定 c++ 标准
add_definitions("-g -Wall -std=c++11")
# 指定 c++ 标准的另外一种方式 set(CMAKE_CXX_STANDARD 11)
# ++++++++++++++++++++++++++++++++++++++++++
# 二选一
# 指定生成目标, executable表示可执行程序
# 也可以指定生成目标为类库
add_executable(Tutorial tutorial.cpp)
# 指定生成目标,SHARED动态库,STATIC静态库
add_library(${PROJECT_NAME} SHARED library.cpp library.h)
# ++++++++++++++++++++++++++++++++++++++++++++++
同目录多文件
# 设置cmake最小版本
cmake_minimum_required(VERSION 3.10)
# 设置工程名称和版本
project(Demo VERSION 1.0)
# 指定 c++ 标准
set(CMAKE_CXX_STANDARD 11)
# 指定生成目标
add_executable(Demo main.cc MathFunctions.cc) # 包含多个文件
同目录多文件2
# 设置cmake最小版本
cmake_minimum_required(VERSION 3.10)
# 设置工程名称和版本
project(Demo VERSION 1.0)
# 指定 c++ 标准
set(CMAKE_CXX_STANDARD 11)
# 查找当前目录下的所有源文件 aux_source_directory(<路径> <变量名>)
# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)
# 指定生成目标
add_executable(Demo ${DIR_SRCS}) # 包含多个文件
多目录多文件
每个目录里面个写一个CMakeLists.txt
## 主目录
cmake_minimum_required(VERSION 3.10)
# 设置工程名称和版本
project(Demo VERSION 1.0)
# 指定 c++ 标准
set(CMAKE_CXX_STANDARD 11)
# 查找当前目录下的所有源文件 aux_source_directory(<路径> <变量名>)
# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)
# 添加子目录,math是主目录下的目录,包含多个源文件
add_subdirectory(math)
# 指定生成目标
add_executable(Demo ${DIR_SRCS}) # 包含多个文件
## 子目录 math
aux_source_directory(. LIB_SRCS) # 添加当前目录下所有的源文件
add_library (power ${LIB_SRCS}) # 当前目录下的文件生成一个链接库
如果不需要子目录生成链接库,可以只再主目录写一个CMakeLists.txt
## 主目录
cmake_minimum_required(VERSION 3.10)
# 设置工程名称和版本
project(Demo VERSION 1.0)
# 指定 c++ 标准
set(CMAKE_CXX_STANDARD 11)
# 查找当前目录下的所有源文件 aux_source_directory(<路径> <变量名>)
# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)
# 将子目录源码保存到SUB_DIR_SRCS 变量
aux_source_directory(./math SUB_DIR_SRCS)
# 指定生成目标
add_executable(Demo ${DIR_SRCS} ${SUB_DIR_SRCS}) # 包含多个文件
包含其他目录的文件
通过 set 声明变量,指定源码文件
cmake_minimum_required(VERSION 3.10)
# 设置工程名称和版本
project(Demo VERSION 1.0)
# 指定 c++ 标准
set(CMAKE_CXX_STANDARD 11)
# 声明MYSRC 变量,设置需要编译的文件
set(MYSRC
./main.cc
./math/MathFunctions.cc
/usr/sqlite/sqlie.cc
../include/zmq.cc)
add_executable(Demo ${MYSRC}) # 包含多个文件
设置include目录
通过 INCLUDE_DIRECTORIES 添加 include 目录
cmake_minimum_required(VERSION 3.10)
# 设置工程名称和版本
project(Demo VERSION 1.0)
# 指定 c++ 标准
set(CMAKE_CXX_STANDARD 11)
set(MYSRC
./main.cc
./math/MathFunctions.cc)
# 添加include 目录
include_directories(/usr/lib/math/include
/usr/lib/log/include)
add_executable(Demo ${MYSRC}) # 包含多个文件
连接动态、静态库
LINK_DIRECTORIES 指定目录,自动查找
TARGET_LINK_LIBRARIES 指定具体的库文件
cmake_minimum_required(VERSION 3.10)
# 设置工程名称和版本
project(Demo VERSION 1.0)
# 指定 c++ 标准
set(CMAKE_CXX_STANDARD 11)
set(MYSRC
./main.cc
./math/MathFunctions.cc)
# 链接文件目录
LINK_DIRECTORIES(/usr/lib/sqlite
/usr/lib/zmq
../lib)
# 链接库
TARGET_LINK_LIBRARIES(/lib/math/power.so
../lib/math.so)
add_executable(Demo ${MYSRC}) # 包含多个文件
多工程
Cmake 系统变量
平台变量
CMAKE_SYSTEM:系統全名,如 “Linux-2.4.22”,“FreeBSD-5.4-RELEASE” 或 “Windows 5.1”
CMAKE_SYSTEM_NAME:系統名称,如 “Linux”, “FreeBSD” or “Windows”,注意大小写
CMAKE_SYSTEM_VERSION:只显示系统全名中的版本部分
CMAKE_SYSTEM_PROCESSOR:CPU名称
系统标志
面的变量都是BOOL类型的,如果与当前系统或编译器相符,值为True,反之为False
UNIX
WIN32 for MINGW,CYGWIN,MSYS
APPLE
BORLAND
WATCOM
MSVC,MSVC_IDE,CMAKE_COMPILER_2005,MSVC60/70/71/80/90/10,针对不同的Visual C++
CMAKE_COMPILER_IS_GUNCXX/CMAKE_COMPILER_IS_GUNCC
编译时选项
BUIlD_SHARED_LIBS:将所有程序库的target设置成共享库
CMAKE_BUIlD_TYPE:控制构建类型,以下为可选参数:
None:default;Debug:生成调试信息;Release:发布版本,进行最佳化,需要注意这个值不会在configure的事件自动初始化,需要手动指定
命令使用:cmake -DCMAKE_BUILD_TYPE = Release
CMAKE_C_FLAGS
CMAKE_C_FLAGS_DEBUG
CMAKE_C_FLAGS_RELEASE
CMAKE_CXX_FLAGS
CMAKE_CXX_FLAGS_DEBUG
CMAKE_CXX_FLAGS_RELEASE
c++ 11 开启多线程
set(CMAKE_CXX_FLAGS “${CMAKE_CXX_FLAGS} -pthread”)
屏蔽编译waring
add_compile_options(-w) # 关闭所有警告
add_compile_options(-Wall) # 开启所有警告
add_compile_options(-Wno-unused-variable) # 指定警告有效,cuda文件报警