cmake学习总结

                   

        你或许听过好几种 Make 工具,例如 GNU Make QT  qmake ,微软的 MS nmakeBSD Makepmake),Makepp,等等。这些 Make 工具遵循着不同的规范和标准,所执行的 Makefile 格式也千差万别。这样就带来了一个严峻的问题:如果软件想跨平台,必须要保证能够在不同平台编译。而如果使用上面的 Make 工具,就得为每一种标准写一次 Makefile ,这将是一件让人抓狂的工作。

       cmake就是针对上面问题所设计的工具:它首先允许开发者编写一种平台无关的 CMakeList.txt 文件来定制整个编译流程,然后再根据目标用户的平台进一步生成所需的本地化 Makefile 和工程文件,如 Unix Makefile Windows Visual Studio 工程。从而做到“Write once, run everywhere”。显然,CMake 是一个比上述几种 make 更高级的编译配置工具。

 

      Linux平台下使用cmake生成makefile并编译的流程如下:

      1、编写cmake配置文件cmakelists.txt

      2、执行命令cmake path或者ccmake path生成makefile。其中pathcmakelists所在的目录

       3、使用make命令进行编译

cmake使用过程(linux平台下):

单个源文件:

1)编写源文件,如hello.cpp

2)编写CMakeLists.txt文件

格式:

#CMake最低版本号要求:

cmake_minimum_required(version 2.8)

#项目信息

projectdemo #demo是文件夹的名字,表示改项目名称是demo

#指定生成目标

add_executable(demo main.cc),将main.cc编译成一个成名为demo的可执行文件

3)在当前目录执行cmake .     得到makefile

4)再使用make命令编译得到demo

5)执行demo可执行文件即可


同一目录,多个源文件

这时候,CMakeLists.txt可以改成如下形式:

cmake_minimum_requiredVERSION 2.8

project (Demo2)

add_executable(Demo main.cc MathFunctions.cc)

唯一的改动只是在add_executable命令中增加一个MathFunction.cc,源文件,但是源文件过多时这么写费劲,可用

aux_source_directory(<dir> <variable>)实现

如:

aux_source_directory(. DIR_SRCS)

意思是当.目录下的所有源文件存入变量 DIR_SRCS中。

于是,修改add_executable(Demo ${DIR_SRCS})


多个目录,多个源文件


对于这种情况,需要分别在项目根目录demo3math目录里个编写一个CMakeLists.txt,为了方便,我们可以先将math目录里的文件编译成静态库再由main函数调用

1)根目录中的CMakeLists.txt

cmake_minimum_required(VERSION 2.8)

project (Demo3)

#查找当前目录下的所有源文件

#并将名称保存到 DIR_SRCS变量

aux_source_directory(. DIR_SRCS)

#添加 math 子目录

add_subdirectory(math),指明本项目包含一个子目录math,这样math目录下的CmakeLists.txt文件和源代码也会被处理掉,

#指定生成目标

add_executable(Demo  ${DIR_SRCS})

#添加链接库

target_link_libraries(Demo MathFunctions),指明可执行文件main需要连接一个名为MathFunctions的链接库。


子目录中的CMakeLists.txt

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

aux_source_directory(. DIR_LIB_SRCS)

#生成链接库

add_library(MathFunction ${DIR_LIB_SRCS})

在该文件中使用命令add_librarysrc目录中的源文件编译成静态链接库



    




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值