cmake新鲜出炉,明天实战

cmake

一款开源的项目工程构建工具

特点

  1. 开放源代码,使用类 BSD 许可发布。
  2. 跨平台,并可生成 native 编译配置文件,在 Linux/Unix 平台,生成 makefile,在 苹果平台,可以生成 xcode,在 Windows 平台,可以生成 MSVC 的工程文件。
  3. 能够管理大型项目,KDE4 就是最好的证明。
  4. 简化编译构建过程和编译过程。Cmake 的工具链非常简单:cmake+make。
  5. 高效率,按照 KDE 官方说法,CMake 构建 KDE4 的 kdelibs 要比使用 autotools 来 构建 KDE3.5.6 的 kdelibs 快 40%,主要是因为 Cmake 在工具链中没有 libtool。
  6. 可扩展,可以为 cmake 编写特定功能的模块,扩充 cmake 功能。

安装cmake

首先下载源码包
http://www.cmake.org/cmake/resources/software.html

​ 这里下载的是cmake-2.6.4.tar.gz

随便找个目录解压缩

tar -xzvf cmake-2.6.4. tar.gz
cd cmake-2.6.4

依次执行:

./bootstrap
make
make install

构建项目

hello world

  1. 创建一个工程目录
  2. 添加文件 main.c
  3. 工程目录下建立一个新的文件CMakeLists.txt
  4. 编译项目,创建build目录,每次编译前可以清空此目录;
 $ ls
        hello
        $ cd hello/build/
        $ ls
        $ cmake ..//cmakelist.txt所在的目录
        – The C compiler identification is GNU
        – The CXX compiler identification is GNU
        – Check for working C compiler: /usr/bin/gcc
        – Check for working C compiler: /usr/bin/gcc — works
        – Detecting C compiler ABI info
         – Detecting C compiler ABI info - done
        – Check for working CXX compiler: /usr/bin/c++
        – Check for working CXX compiler: /usr/bin/c++ — works
        – Detecting CXX compiler ABI info
        – Detecting CXX compiler ABI info - done
        – Configuring done
        – Generating done
        – Build files have been written to: /home/kermit/Project/cmake/hello/build
        $ make//可执行程序编译完成

cmakelist.txt

命令不区分大小写;

#后面时注释

#cmake最低版本需求,不加入此行会受到警告信息
	CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
    PROJECT(HELLO) #项目名称
	#把当前目录(.)下所有源代码文件和头文件加入变量SRC_LIST
    AUX_SOURCE_DIRECTORY(. SRC_LIST)
    #生成应用程序 hello (在windows下会自动生成hello.exe)
    ADD_EXECUTABLE(hello ${SRC_LIST})

main.c

#include

int main(void)
{
		printf(”Hello,Worldn”);
		return 0;
}

处理多目录

源代码分布情况

第一步,项目主目录中的 CMakeLists.txt

	PROJECT(main) #项目名称
	CMAKE_MINIMUM_REQUIRED(VERSION 2.6) #最低版本要求
	ADD_SUBDIRECTORY( src ) #添加子目录进工程
	AUX_SOURCE_DIRECTORY(. DIR_SRCS) #将当前目录的源文件添加到链表中
	ADD_EXECUTABLE(main ${DIR_SRCS}) #依赖这些源文件生成目标文件
	TARGET_LINK_LIBRARIES( main Test) #需要依赖链接的目标库文件

第二步,子目录中的 CmakeLists.txt

在子目录 src 中创建 CmakeLists.txt。

 AUX_SOURCE_DIRECTORY(. DIR_TEST1_SRCS) #将当前目录下的所有源文件添加到链表中
 ADD_LIBRARY ( Test ${DIR_TEST1_SRCS}) #依赖链表中的源文件,生成目标库文件

第三步,执行 cmake

此过程同单文件项目;

依赖其他库

第一步,程序库说明文件

在项目的根目录中创建目录 cmake/modules/ ,在 cmake/modules/ 下创建文件 Findlibdb_cxx.cmake

MESSAGE(STATUS "Using bundled Findlibdb.cmake...")
 FIND_PATH(
   LIBDB_CXX_INCLUDE_DIR
   db_cxx.h 
   #在如下目录中 查找 db_cxx.h,并保存在LIBDB_CXX_INCLUDE_DIR
   /usr/include/ 
   /usr/local/include/ 
   )
 
 FIND_LIBRARY(
   LIBDB_CXX_LIBRARIES NAMES  db_cxx
   在如下目录中查找db_cxx,并保存在LIBDB_CXX_LIBRARIES
   PATHS /usr/lib/ /usr/local/lib/
   )

FindlibNAME.cmake ,其中NAME 是函数库的名称。

MESSAGE 会将参的内容输出到终端

FIND_PATH 指明头文件查找的路径

FIND_LIBRARY 用于查找链接库并将结果保存在变量中

第二步, 项目的根目录中的 CmakeList.txt

在项目的根目录中创建 CmakeList.txt :

PROJECT(main) 

CMAKE_MINIMUM_REQUIRED(VERSION 2.6)

SET(CMAKE_SOURCE_DIR .)
#到目录 ./cmake/modules 中查找 Findlibdb_cxx.cmake
SET(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules)

AUX_SOURCE_DIRECTORY(. DIR_SRCS)

ADD_EXECUTABLE(main ${DIR_SRCS})
#查找链接库和头文件的过程
#到变量 CMAKE_MODULE_PATH 指示的目录中查找文件 Findlibdb_cxx.cmake 并执行
FIND_PACKAGE( libdb_cxx REQUIRED)
#标记已命名的缓冲变量为 advanced.  
MARK_AS_ADVANCED(
 LIBDB_CXX_INCLUDE_DIR
 LIBDB_CXX_LIBRARIES
 )
 #如果 LIBDB_CXX_INCLUDE_DIR 和 LIBDB_CXX_LIBRARIES 都已经被赋值,则设置编译时到 LIBDB_CXX_INCLUDE_DIR 寻找头文件并且设置可执行文件 main 需要与链接库 LIBDB_CXX_LIBRARIES 进行连接。
IF (LIBDB_CXX_INCLUDE_DIR AND LIBDB_CXX_LIBRARIES
 MESSAGE(STATUS "Found libdb libraries")
 INCLUDE_DIRECTORIES(${LIBDB_CXX_INCLUDE_DIR})
 MESSAGE( ${LIBDB_CXX_LIBRARIES} )
 TARGET_LINK_LIBRARIES(main ${LIBDB_CXX_LIBRARIES}
 )
ENDIF (LIBDB_CXX_INCLUDE_DIR AND LIBDB_CXX_LIBRARIES)

第三步,执行 cmake

生成 debug 版和 release 版的程序

SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")

cmake … -DCMAKE_BUILD_TYPE=Release/debug

字符串作为编译选项生成 Makefile

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值