`
tcspecial
  • 浏览: 895931 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

cmake 使用

阅读更多

当工程规模比较大复杂时,手写Makefile十分不便,要是能自动生成Makefile,那该多好。cmake就这样诞生了,cmake是一个跨平台的自动化构建系统,它使用名为CMakeLists.txt来管理Makefile文件。不过从易用性方面而言,比qmake还是逊色多了。

 

一. 安装

下载源码,运行 ./bootstrap, make, make install 即可

 

二. 工程处理

2.1 动态库

#生成动态库libadd.so
PROJECT(add)						#工程名称
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)	#cmake最低版本限制
AUX_SOURCE_DIRECTORY(. DIR_SRCS1)	#将当前目录赋给变量DIR_SRC1
ADD_LIBRARY(add SHARED ${DIR_SRCS1}) #编译${DIR_SRCS1}文件,生成动态库libadd.so 

SET(CMAKE_BUILD_TYPE Debug)			#设置工程为Debug版本,或者直接运行 cmake -DCMAKE_BUILD_TYPE=Debug(或Release)
SET_TARGET_PROPERTIES(add PROPERTIES VERSION 1.0 SOVERSION 1)	#设置动态库版本号
MESSAGE(STATUS "finish compiler libadd")	#打印信息

在当前目录直接运行 cmake,会生成 Makefile

 

2.2 app工程

PROJECT(depend)							
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
ADD_SUBDIRECTORY(src)					#添加子目录
AUX_SOURCE_DIRECTORY(. DIR_SRCS)
ADD_EXECUTABLE(depend ${DIR_SRCS})		#生成可执行文件depend


INCLUDE_DIRECTORIES(
src										#include文件目录
)

ADD_DEFINITIONS(
-DHELLO									#预编译宏定义开关
-DWORLD
)

SET(CMAKE_BUILD_TYPE Debug)
SET(CMAKE_VERBOSE_MAKEFILE on)			#默认情况下,不会打印make执行过程,on启用即可
SET(EXECUTABLE_OUTPUT_PATH ./bin)
TARGET_LINK_LIBRARIES(depend add)		#添加依赖库libadd.so

#for 语句
SET(VAR a b c)
FOREACH(f ${VAR})
	MESSAGE("print " ${f})
ENDFOREACH(f)

#if 语句
SET(AAA abc)
IF(AAA STREQUAL abc)
	MESSAGE(STATUS "TRUE")
ENDIF()

#os 判断
IF(UNIX)
	MESSAGE("OS: Linux")
ENDIF()

#自定义命令
SET(CUSTOM_TARGET depend-1)
add_custom_command(
	PRE_BUILD
	COMMAND echo "execute a fake cmd"
	COMMENT "This cmd will be execute before building"

	OUTPUT ${CUSTOM_TARGET}
	COMMAND	cp test.txt bin/${CUSTOM_TARGET}
	DEPENDS test.txt
)
ADD_CUSTOM_TARGET(whatever DEPENDS ${CUSTOM_TARGET})	#make whatever,会拷贝test.txt文件到bin/

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics