Cmake的使用

使用过程:
•1)编写 CmakeLists.txt。
•2)执行命令“cmake PATH”或者“ccmake PATH”生成 Makefile ( PATH 是 CMakeLists.txt
所在的目录 )。
•3)使用 make 命令进行编译。

1、单目录多源文件工程的CMake

project(demo) # 项目信息,此项可不写

cmake_minimum_required(VERSION 2.8) #CMake最低版本号要求

aux_source_directory(. DIR_SRCS)#查找当前目录下的所有源文件,#并将名称保存到DIR_SRCS变量

add_executable(main ${DIR_SRCS})#指定生成目标,main为生成的可执行文件名,可修改

2. 多目录多文件工程的CMake
假设当前目录包含子目录math,目录结构如下:
. #根目录
|–main.cpp
|–math #子目录
  |–MathFunctions.cpp
  |–MathFunctions.h

需要在根目录和子目录math中分别建立 CMake文件,结构如下:
|–CmMakelists.txt #根目录下的Cmake
|–main.cpp
|–math
  |–CMakelists.txt #子目录下的CMake
  |–MathFunctions.cpp
  |–MathFunctions.h

根目录下的CMakeLists.txt文件编写:

	project(demo) # 项目信息
	
	cmake_minimum_required(VERSION 2.8) # CMake最低版本号要求
	
	aux_source_directory(. DIR_SRCS) # 查找当前目录下的所有源文件,并将名称保存到DIR_SRCS变量
	
	add_subdirectory(math) # 添加math子目录
	
	add_executable(demo ${DIR_SRCS}) # 指定生成目标 
	
	target_link_libraries(demo MathFunctions) # 添加链接库,指明可执行文件 main 需要连接一个名为MathFunctions的链接库

子目录下的CMakeLists.txt文件编写:

	aux_source_directory(. DIR_LIB_SRCS) # 查找当前目录下的所有源文件,并将名称保存到DIR_LIB_SRCS变量

	add_library(MathFunctions ${DIR_LIB_SRCS}) # 生成链接库

命令格式及示例:

cmake_minimum_required:

	 设置项目要求的CMake最低版本号,注意在project之前调用该命令,一般在CMakeLists.txt文件开头调用。命令格式为:
		cmake_minimum_required(VERSION major.minor[.patch[.tweak]] [FATAL_ERROR])
	例:
		cmake_minimum_required(VERSION 2.8.5)

aux_source_directory:

	命令格式为:aux_source_directory(<dir> <variable>)#查找指定目录dir中所有源文件的名称,并将列表存储在提供的variable中。
	例:
		aux_source_directory(. DIR_SRCS)

add_executable:使用指定的源文件给项目添加一个可执行文件。

	命令格式为:
		add_executable(<name> [WIN32] [MACOSX_BUNDLE]
					   [EXCLUDE_FROM_ALL]
					   source1 [source2 ...])
		参数解释:https://www.cnblogs.com/alphagl/p/6280061.html
	例:
		add_executable(HelloCMake hello_cmake.c)

add_subdirectory:

	例:
		add_subdirectory(${SRC_ROOT}) #向构建中添加子目录${SRC_ROOT}。

add_library:

	使用指定的源文件生成一个库。命令格式为:
		add_library(<name> [STATIC | SHARED | MODULE]
					[EXCLUDE_FROM_ALL]
					source1 [source2 ...])

	例:
		add_library(HelloCMake hello_cmake.c)

target_link_libraries:

	将给定的库链接到一个目标上。
	命令格式为:
		target_link_libraries(<target> ... <item>... ...)
	例:
		target_link_libraries(luacocos2d cocos2d)

set命令 ;

	定义格式:SET(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]]) 
	例1:
		set(libs "${CMAKE_SOURCE_DIR}/src/main/jnilibs")# 定义了一个变量libs,变量的值为${CMAKE_SOURCE_DIR}/src/main/jnilibs,其中CMAKE_SOURCE_DIR 是一个cmake内置变量,指定了CMakeLists.txt所在的目录

	例2:
		set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/src/main/jnilibs/${ANDROID_ABI}) #这个命令用于给CMAKE_LIBRARY_OUTPUT_DIRECTORY宏赋值,该宏指定了cmake编译输出文件的目录为${PROJECT_SOURCE_DIR}/src/main/jnilibs/${ANDROID_ABI},其中PROJECT_SOURCE_DIR 是cmake内置宏,指向构建工程的全路径

add_definitions:为源文件的编译添加由-D引入的宏定义。

	命令格式为:add_definitions(-DFOO -DBAR ...)
	例:
		add_definitions(-DWIN32)

add_dependencies:

	使顶级目标依赖于其他顶级目标,以确保它们在该目标之前构建。这里的顶级目标是由add_executable,add_library或add_custom_target命令之一创建的目标。
	例:
		add_custom_target(mylib DEPENDS ${MYLIB})
		add_executable(${APP_NAME} ${SRC_LIST})
		add_dependencies(${APP_NAME} mylib)

configure_file:

	将文件复制到其他位置并修改其内容

其它命令查考:https://www.cnblogs.com/alphagl/p/6280061.html

常用变量:

使用${}进行变量的引用。例如:message(${Hello_VERSION}),Hello为工程名。CMake提供了很多有用的变量。以下仅列举常用的变量:

CMAKE_BINARY_DIR:构建树的顶层路径

CMAKE_COMMAND:指向CMake可执行文件的完整路径

CMAKE_CURRENT_BINARY_DIR:当前正在被处理的二进制目录的路径。

CMAKE_CURRENT_SOURCE_DIR:指向正在被处理的源码目录的路径。

CMAKE_HOME_DIRECTORY:指向源码树顶层的路径。

CMAKE_PROJECT_NAME:当前工程的工程名。

CMAKE_ROOT:CMake的安装路径。

CMAKE_SOURCE_DIR:源码树的顶层路径。

CMAKE_VERSION:cmake的完整版本号。

PROJECT_BINARY_DIR:指向当前编译工程构建的全路径。

<PROJECT-NAME>_BINARY_DIR:指向当前编译工程构建的全路径。

<PROJECT-NAME>_SOURCE_DIR:指向构建工程的全路径。

PROJECT_SOURCE_DIR:指向构建工程的全路径。

PROJECT_NAME:project命令传递的工程名参数。

<PROJECT-NAME>_VERSION:项目的完整版本号。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值