CMake的历史与编写规范(write once,run everywhere)、支持gdb调试工具、利用其中的CPack生成安装包

转载出处链接:http://www.hahack.com/codes/cmake/

                         https://blog.csdn.net/u010122972/article/details/78216013

一、CMake的历史

       由于各种make工具遵循不同的规范和标准,所执行的Makefile格式也不同,但如果想让软件跨平台,必须要保证能够在不同平台编译,但使用这些make工具就得为每一种标准写一次Makefile,因此CMake应运而生。

       CMake首先允许开发者编写一种与平台无关的CMakeList.txt来定制整个编译流程,

                  然后再根据目标用户的平台进一步生成所需的本地化Makefile和工程文件,如Unix的Makefile或Windows的Visual Studio

二、CMake的编写(CMakeLists.txt并不是顺序执行的,相当于一系列的声明)

CMakeList.txt 的语法比较简单,由命令、注释和空格组成:

#后面内容为注释;

命令由命令名称、小括号和参数组成,参数之间使用空格进行间隔,其中命令是不区分大小写的。

 

  • 在linux平台下使用CMake生成Makefile并编译的流程如下:
  1. 编写CMake配置文件CMakeList.txt
  2. 执行命令 cmake PATH 或者 ccmake PATH 生成 Makefile。其中,PATH 是CMakeList.txt所在的目录
  3. 使用 make 命令进行编译

举例:

  1. 单个源文件编写CMakeLists.txt (三行)   其中project(项目名)会引入两个变量XXX_BINARY_DIR(二进制文件保存路径)XXX_SOURCE_DIR(源代码保存路径)
  2. 同一目录下多个源文件编写CMakeLists.txt(四行,多一行是查找当前目录下所有源文件)
  3. 多个目录,多个源文件(每个目录下一个CMakeLists,主目录中还需要添加子目录,添加链接库;子目录两行:查找源文件,生成链接库)
  4. 自定义编译选项

三、CMake的安装与测试

         CMake也可以指定安装规则,以及添加测试。这两个功能分别可以通过在产生Makefile后使用

sudo make install make test 来执行。

  • 制定安装规则: 将库、生成的可执行文件等放在指定的安装路径下。下例将其放在/usr/local/bin和/usr/local/include下。

                              # 指定 MathFunctions 库的安装路径

                              install (TARGETS MathFunctions DESTINATION bin)

                              install (FILES MathFunctions.h DESTINATION include)

                              # 指定安装路径

                              install (TARGETS Demo DESTINATION bin)

                              install (FILES "${PROJECT_BINARY_DIR}/config.h" DESTINATION include)

  • 为工程添加测试:CMake提供了CTest测试工具,只需在项目根目录的CMakeLists文件中使用一系列add_test命令。

 # 启用测试

enable_testing()

# 测试程序是否成功运行

add_test (test_run Demo 5 2)

# 测试帮助信息是否可以正常提示

add_test (test_usage Demo)

set_tests_properties (test_usage

PROPERTIES PASS_REGULAR_EXPRESSION "Usage: .* base exponent")

# 测试 5 的平方

add_test (test_5_2 Demo 5 2)

set_tests_properties (test_5_2

PROPERTIES PASS_REGULAR_EXPRESSION "is 25")

# 测试 10 的 5 次方

add_test (test_10_5 Demo 10 5)

set_tests_properties (test_10_5

PROPERTIES PASS_REGULAR_EXPRESSION "is 100000")

# 测试 2 的 10 次方

add_test (test_2_10 Demo 2 10)

set_tests_properties (test_2_10

PROPERTIES PASS_REGULAR_EXPRESSION "is 1024")

  1. 编写宏来便于测试更多数据
  2.  

    # 定义一个宏,用来简化测试工作

    macro (do_test arg1 arg2 result)

    add_test (test_${arg1}_${arg2} Demo ${arg1} ${arg2})

    set_tests_properties (test_${arg1}_${arg2}

    PROPERTIES PASS_REGULAR_EXPRESSION ${result})

    endmacro (do_test)

    # 使用该宏进行一系列的数据测试

    do_test (5 2 "is 25")

    do_test (10 5 "is 100000")

    do_test (2 10 "is 1024")

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值