文章目录

  • 1、理解编译和cmake
  • 2、尝试编译opencv4.5.4-cuda


1、理解编译和cmake

  • cmake编译的时候只需要cpp文件,.h文件存在的意义只是为了减少代码的重复利用。在预编译的时候.h文件的内容会被拷贝到cpp中取代#include<>。include后面接的是.h的路径,平时我们不用写路径是因为系统环境变量中已经有了。

    但是“…/lesson1-1/add.h”这种写法其实特别不方便,日常中我们也没有延续这种写法,而是转而通过设置系统环境变量,使得include后面为一个库名字。Cmake为了方便这一写法,可以在编译时候指定文件需要查找的路径,其实类似于环境变量的作用
  • Cmake生成指定的项目,如:lib静态库。
    目录如下:

    在最下方的CMakeLists.txt(第一个CmakeList有点类似起到入口的作用)中添加如下代码,告诉cmake应该进入到
    add_subdirectory(lesson2_1/add)文件中查看这个文件中的cmakelist。这就表明每一个目的都是只有一个add_library(add_static add.cpp)或者add_executable()这样的函数。其余的cmakelist文件仅仅用于传递信息。
cmake_minimum_required(VERSION 3.20)
project(cmake_study)
add_subdirectory(lesson2_1/add)

第二个cmakelist,用于描述目的。

add_library(add_static add.cpp)

这样点击需要生成的目标,比如这边是一个生成静态库。有时候会是生成exe文件,或者生成多个文件,因此用下面方法指定生成哪一项任务,也可以生成全部任务。

cmake如何指定python解释器_Desktop

  • 调用dll生成exe文件
//如何链接lib库生成exe文件
cmake_minimum_required(VERSION 3.20)
project(cmake_study)

add_subdirectory(lesson2_1/add)
include_directories(./lesson2_1/lib)

add_executable(lesson2_1 main.cpp)
target_link_libraries(lesson2_1 D:/Desktop/test/lesson2_1/lib/add_static.lib)

每个文件夹下面的CMakeLists.txt其实就是一个“老鼠尾巴”。打头的老鼠负责统领全局,当你保存最前的CMakeLists.txt时候,相当于把所有的CMakeLists.txt文件重新排列,所以Cmake的逻辑表现在每个文件夹下的CMakeLists.txt当中。

  • _declspec(dllexport) 修饰函数,在用cmake的vs编译器生成时候会同时生成dll文件和lib文件。编译的时候只需要lib,只有在执行的时候才会使用dll。
cmake_minimum_required(VERSION 3.20)
project(cmake_study)

add_subdirectory(lesson2_2)
include_directories(./lesson2_2/bin)
#link_libraries(D:/Desktop/test/lesson2_1/lib/add_static.lib)

add_executable(lesson2_2 main.cpp)
target_link_libraries(lesson2_2 D:/Desktop/test/lesson2_2/bin/add_shared.lib)#编译的时候只需要lib,只有在执行的时候才会使用dll。

生成exe之后打开dll,是不是和我们以前配置环境经常出现的问题很相似。

cmake如何指定python解释器_C++_02

cmake如何指定python解释器_cmake如何指定python解释器_03

只要将dll放到exe文件下就行。因为执行的时候需要dll,但在编译的时候是不需要dll的。

2、尝试编译opencv4.5.4-cuda

教学视频 这一跟着一直做就行。最后在生成install的时候

cmake如何指定python解释器_cmake_04


会报错

严重性	代码	说明	项目	文件	行	禁止显示状态
错误	MSB3073	命令“setlocal
"C:\Program Files\CMake\bin\cmake.exe" -DBUILD_TYPE=Release -P cmake_install.cmake
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
:VCEnd”已退出,代码为 1。	INSTALL	C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\Microsoft.CppCommon.targets	155

查了一下原因没有管理员权限。我们只需要先用管理员权限打开VS,在执行install就可以了。