CMake 小助手

1. 编译安装命令, 默认生成debug 版本的

cmake --build ./ --target=install

如果要生成Release 版本的,执行如下命令

cmake --build ./ --target=install --config Release

区分 开发版 与 发布版

上述的代码编译后都是不可调试的,并且没有做编译优化,我们希望能够编译成一个调试版本与一个发布版本。做法如下:

  • 我们将build目录作为开发版本编译目录,与之相对的新建一个release目录作为发布版本

  • build目录下我们执行cmake -DMAKE_BUILD_TYPE=Debug ..,编译命令会使用-g

  • release目录下我们执行cmake -DMAKE_BUILD_TYPE=Release ..,编译命令会使用-O3 -DNDEBUG

所以,在源代码中,我们可以使用NDEBUG宏来控制,在开发版输出调试信息,而在发布版本去掉调试信息。

#ifndef NDEBUG
    printf("author: %s, release_date: %s\n", AUTHOR, RELEASE_DATE ); # 只在开发版本编译
#endif

我自己在写代码的时候,习惯在开发版本打开所有的错误报告,而上述的开发版本只使用了-g,这显然是不够的,需要通过在CMakeLists.txt里重新设置下开发版本的编译参数:

cmake_minimum_required(VERSION 3.10)

PROJECT(PROJECT_ONE)

set(CMAKE_C_FLAGS_DEBUG "-g -Wall -pedantic -DDEBUG")
message(STATUS "debug flags: ${CMAKE_C_FLAGS_DEBUG}")

message(STATUS "release flags: ${CMAKE_C_FLAGS_RELEASE}")
...

通常我习惯使用脚本来完成重复的构建-编译-运行这一过程,参考如下:

# ./make-debug.sh
#!/bin/bash
rm -rf build/*                                # 清理上一次的结果

cd build && cmake -DCMAKE_BUILD_TYPE=debug .. # 进入debug目录,执行构建

make && ./main                                # 编译,然后运行
./make-release.sh
#!/bin/bash
rm -rf release/*                                  # 清理上一次的结果

cd release && cmake -DCMAKE_BUILD_TYPE=release .. # 进入release目录,执行构建

make && ./main                                    # 编译,然后运行

-CMake 安装opencv

mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=../installed
cmake --build ./ --target install

几个参考文献:

cmake | CodeKissYoung

cmake应用:安装和打包 - 知乎为了方便使用项目编译的目标文件,快速部署到目标目录,可以使用CMake的安装功能;如果需要对外发布,提供头文件、库文件、或者demo的压缩包则可以使用CMake的打包功能。在本系列前序的文章中已经介绍了CMake很多…https://zhuanlan.zhihu.com/p/377131996

CMake 编译opencv x86 版本

由于3.0 之后opencv 只提供x64 版本,所以如果需要x86版本的场景下,就只能自己编译x86的版本,cmake.. 之后,用vs2019打开编译opencv, 配置完win32 的配置(原来没有,新增加了一个,拷贝的x64的配置),然后编译的时候一直提示:模块计算机类型“x86”与目标计算机类型“x64”冲突

折腾了一天,最终沉下心来,发现确实有几个配置项是x64, 如下所示:

 

 

修改配置,即可编译成功 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值