CMakeLists 的使用

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文件报警
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值