CMake学习

一、编写 CMake的最底层逻辑

  • c++语言的头文件只是减少重复,在编译阶段会把内容加到#include文件内。

1、CMake安装

  • 需要添加到系统变量:https://blog.csdn.net/u011231598/article/details/80338941
  • 安装vscode插件
    在这里插入图片描述

2、CMake使用

注意两点:犹如加工一道菜,需要找到原材料(文件)和原材料在哪(文件位置)
1、 工程目录如下:有两个lesson,每个lesson都有CMakeLists文件管理
在这里插入图片描述
2、CMakeLists文件内容

  • 一般而言,头文件不需要引入
    CMAKE_STUDY下的CMakeLists.txt
cmake_minimum_required(VERSION 3.1.5) #最低版本限制
project(cmake_study)
add_subdirectory(lesson1_1)   //添加子文件夹,子文件夹内有对应各种的CMakeLists.txt,如果想编译lesson1_1则可以加这个
add_subdirectory(lesson1_2) //添加子文件夹,子文件夹内有对应各种的CMakeLists.txt,如果想编译lesson1_2则可以加这个

lesson1_1下的CMakeLists.txt

cmake_minimum_required(VERSION 3.1.0) #最低版本限制

# 项目名称
project(test2 VERSION 0.1.0 LANGUAGES C CXX)
# 需要引入的文件夹名(菜名),cpp文件(材料名)
add_executable(lesson1_1 main.cpp) //此处的材料名可以引上一级文件夹也可以引下一文件夹

# 如果需要引用其他文件,可以通过下代码,引入该文件内所有文件。(lesson1-1有CMakeLists)
include_directories(../lesson1_1)  //把想要加的路径加进来,在include头文件部分就不需要加此路径

lesson1_2下的CMakeLists.txt

cmake_minimum_required(VERSION 3.1.0) #最低版本限制

# 项目名称
project(test2 VERSION 0.1.0 LANGUAGES C CXX)
# 生成可执行文件,需要引入的文件名(菜名),cpp文件(材料名)
add_executable(lesson1_2 main.cpp ../lesson1_2/add.cpp) //此处的材料名可以引上一级文件夹也可以引下一文件夹
  • CMakeLists.txt文件用于配置CMake的设置。配置文件也需要跟CMakeLists同一文件夹

通过vscode对应位置就可以执行:这部分没有,可以用ctrl+shift+p,输入cmake,点击配置
在这里插入图片描述
build是编译;第二个是运行

二、静态库和动态库;使用OpenCV

Windows一般动态库生成bin文件夹(内置dll文件),静态库生成lib文件夹(内置lib文件)。

  • CMAKE_STUDY文件是包含 三个文件夹和一个CMakeLists.txt。其中lesson2_1为静态库,lesson2_2为动态库。
  • 静态库:在编译阶段,链接阶段,直接把库放到可执行文件里,生成的可执行文件可单独执行。
  • 动态库:只有在运行时才会加载的库。须跟可执行文件放一起,可执行文件执行时,需要找到动态库。

1、制作静态库

  • lesson2_1下的add文件夹下的CMakeLists.txt,然后build,就可以生成对应add的静态库,add_static名的lib静态库
//生成静态库,名字;源材料
add_library(add_static add.cpp)
  • 在lesson2_1会生成一个lib,把这个lib复制到对应位置,则可直接用。
    在这里插入图片描述
  • 为了方便别人能知道,也可以这么写,方便看。
    在这里插入图片描述
  • 另一种方案也可以不写。
    在这里插入图片描述
    在lesson2_1下的CMakeLists.txt
add_subdiretory(add) //添加add库(编译的add文件夹)加进来

include_directories(./lib)  //把想要加的路径加进来,在include头文件部分就不需要加此路径

add_executable(lesson2_1 main.cpp) //此处不可直接link lib文件,lib由静态库生成

//方案1(推荐)链接库文件
target_link_libraries(lesson2_1 C:\lcmake_study\lesson2_1\lib\add_static.lib)

//方案2(不推荐)
//link  lib文件
link_libraries(C:\lcmake_study\lesson2_1\lib\add_static.lib) //注意此处需要放绝对路径

2、制作动态库

windows和vscode下,想把文件导成动态库时:
在这里插入图片描述

  • lesson2_2下的add下的CMakeLists.txt
//生成静态库,名字;源材料(与静态库唯一区别就是加SHARED)
add_library(add_shared SHARED add.cpp)
  • add下的cpp文件,需要导出的文件,要使用静态库需要加__declspec(dllexport)到cpp文件:
    会给你生成dll和lib文件,__declspec(dllexport) int add(int a, int b),代表这个函数是需要导出的,然后会将导出和可链接的信息放到lib文件里面。所以在静态库编译时,需要lib,在使用时用dll。在CMakeLists链接也是链接同时生成的lib文件。

在这里插入图片描述

  • 需要把编译的built文件里面编译出来的lib文件挪到bin文件夹下
    在这里插入图片描述

  • lesson2_2下下的CMakeLists.txt,编译,就能成功

add_subdirectory(add)

include_directories(./bin)  

add_executable(lesson2_2 main.cpp) //此
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值