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 编译opencv x86 版本

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

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

tesseract cmake 编译 cmake编译release版本_visualstudio

tesseract cmake 编译 cmake编译release版本_visualstudio_02

 

tesseract cmake 编译 cmake编译release版本_tesseract cmake 编译_03

tesseract cmake 编译 cmake编译release版本_visual studio_04

 

修改配置,即可编译成功