首页
学习
活动
专区
圈层
工具
发布

利用cmake tool进行cmake工程的调试与运行

但是对于生成lib、dll等稍复杂的项目,虽然可以借助task.json配置不同的task来实现,但使用g++中rcs等归档命令还是有些晦涩难懂,所以单纯的使用task.json文件来生成lib、dll...其中CMake插件更侧重于cmake脚本(如CMakeLists.txt文件)的编写体验,而CMake Tools插件则是一个功能更为全面的CMake集成开发环境(IDE)插件,它涵盖了脚本编写、项目的配置...无论是单文件、多文件、多文件夹项目,乃至是生成lib、dll库以及引用第三方库的项目,只要其CMakeLists.txt文件配置正确,那么对于VS Code来说,其运行和调试都是一样的,因此本节以同时生成库文件和其测试程序...exe为例,演示如何使用cmake插件来实现其运行和调试。...项目结构为如下: 其中add文件夹下用于生成库文件ADD.dll和ADD.lib,src文件夹下用于生成测试ADD库文件的可执行程序,因此,本项目存在三个CMakeLists.txt文件,分别是add文件夹下的

3.1K11
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    CMake用法,这篇文章讲全了

    . ├── CMakeLists.txt └── main.cpp 那么该如何使用书写其CMakeLists文件呢,如下为一个简单的CMakeLists.txt示例: cmake_minimum_required...引用第三方库(静态库) 在实际开发中,往往需要依赖外部库。以静态库为例,考虑引入其他同事提供的库func.lib,其配套的头文件为func.h,同时,生成的动态库名称为BirdEngine。...引用第三方库(动态库+静态库) 针对于同时依赖静态库和动态库的场景,需要在链接阶段找到lib库,同时需要在运行阶段找到dll库。...假设某项目需要库BirdEngine,其静态库为BirdEngine.lib,动态库为BirdEngine.dll,其文件夹布局如下: . ├── CMakeLists.txt ├── third_party...同时,通过file命令复制动态库到输出目录。 总结 本文结合实际场景讲解CMakeLists.txt文件的组织,包括单文件、多文件、多文件夹项目构建,以及如何灵活地集成和管理第三方库。

    68510

    CMake构建学习笔记23-SQLite库的构建

    SQLite是一个老牌的C库,不提供CMake的构建方式,而且它还是个可执行程序而不仅仅是库,这给程序的集成带来一定的麻烦。 那么如何在Windows下将SQLite构建成库文件呢?...另外,sqlite3.def是模块定义文件,为Windows的DLL模块定义各种属性和导出符号。如果是像笔者一样需要构建成动态库,那么这个文件一定要有。...") # cmake的最低版本要求 cmake_minimum_required (VERSION 3.10) # 工程名称、版本、语言 project(sqlite3 VERSION 3.4.6)...lib 目录 install(TARGETS ${PROJECT_NAME} LIBRARY DESTINATION lib # 对于共享库 ARCHIVE DESTINATION...lib # 对于静态库 RUNTIME DESTINATION bin # 对于可执行文件 ) 然后执行如下脚本指令: cmake $SourceLocalPath ` -

    20010

    【C++ 语言】Visual Studio 配置 FFMPEG 开发环境 ( VS2019 CMake 环境安装 | 下载 FFMPEG 开发包 | 配置 FFMPEG )

    项目 ; 2.选择项目类型 : 选择 CMake 项目类型 ; 3.输入项目名称 , 选择项目位置 , 解决方案命名使用系统自动生成的 , 点击 “创建” 按钮 , 创建新项目 ; 4.进入代码界面后...( .dll ) 文件处理 1.头文件和静态链接库 ( .lib ) 解压拷贝 ① 解压 ffmpeg-20190813-8cd96e1-win64-dev.zip 文件 , 如下 : ② 将其中的...lib 和 include 目录整体拷贝到 CMake 项目的源码目录下 ; 2.动态链接库 ( .dll ) 解压拷贝 ① 将 ffmpeg-20190813-8cd96e1-win64-shared.zip...要配置的文件 : 此处要配置的 CMake 配置文件是源码路径下的 CMakeList.txt 配置文件 , 不是项目根目录下的配置文件 ; 2.配置头文件目录 : 之前拷贝的 include 目录到源码目录下...: 这里也配置相对路径 “lib” ; #配置库文件目录 : 设置 lib 库文件查找目录 , 相当于 Java 中的 jar 包 link_directories("lib") 4.配置 8 个 FFMPEG

    3.6K10

    Android NDK 开发 | CMake 使用手册 - 初见篇

    CMake 本质上是一个 编译工具,其最终目的是方便地生成可执行文件或共享库。编译的过程和项目的配置,由 CMakeLists.txt 文件负责定义。...链接库的构建与集成 Android 的朋友应该对 so 动态链接库并不陌生,windows 的朋友对 dll 动态链接库也不陌生。其实两者本质上是类似的,只是在不同平台构建的产物不同罢了。...target_link_libraries: 对库进行链接,注意名称,这里的库名是 libfacer.so ,指定的名称是 facer 。...而不是感觉这些都是魔法,就像我第一次接触时,就不由感慨。 ---- 接下来我们将刚才编译的 libfacer.so 在这里集成一下做个小结。...中可以通过 readelf -h 查看动态链接库的信息: ---- 那么现在问题来了,我们该如何获取各个架构的 so 呢?

    1.6K20

    CMake学习笔记合集

    —–高级编译配置工具 当多个人用不同的语言或者编译器开发一个项目,最终要输出一个可执行文件或者共享库(dll,so等等)这时候神器就出现了—–CMake!.../configure –prefix=/usr 如何安装HelloWord 使用CMAKE一个新的指令:INSTALL INSTALL的安装可以包括:二进制、动态库、静态库以及文件、目录、脚本等 使用CMAKE...2,安装头文件与共享库。 静态库和动态库的区别 静态库的扩展名一般为“.a”或“.lib”;动态库的扩展名一般为“.so”或“.dll”。...安装共享库和头文件 本例中我们将 hello 的共享库安装到/lib目录, 将 hello.h 安装到/include/hello 目录 //文件放到该目录下 INSTALL(FILES hello.h...CMAKE_INCLUDE_PATH 和 CMAKE_LIBRARY_PATH 注意:这两个是环境变量而不是 cmake 变量,可以在linux的bash中进行设置 我们上面例子中使用了绝对路径INCLUDE_DIRECTORIES

    2.4K20

    CMake学习笔记

    —–高级编译配置工具 当多个人用不同的语言或者编译器开发一个项目,最终要输出一个可执行文件或者共享库(dll,so等等)这时候神器就出现了—–CMake!.../configure –prefix=/usr 如何安装HelloWord 使用CMAKE一个新的指令:INSTALL INSTALL的安装可以包括:二进制、动态库、静态库以及文件、目录、脚本等 使用CMAKE...2,安装头文件与共享库。 静态库和动态库的区别 静态库的扩展名一般为“.a”或“.lib”;动态库的扩展名一般为“.so”或“.dll”。...安装共享库和头文件 本例中我们将 hello 的共享库安装到/lib目录, 将 hello.h 安装到/include/hello 目录 //文件放到该目录下 INSTALL(FILES hello.h...CMAKE_INCLUDE_PATH 和 CMAKE_LIBRARY_PATH 注意:这两个是环境变量而不是 cmake 变量,可以在linux的bash中进行设置 我们上面例子中使用了绝对路径INCLUDE_DIRECTORIES

    2.3K20

    咱不知道的动态链接库小细节

    俗称.so文件(姑且就以linux系统为例,在windows中称为dll,在mac中为的dylib),在平时的使用中我们对其察觉可能并不是很深,但其实我们玩电脑的时候无时不刻在使用动态链接库。...借用《深入理解计算机系统第3版》中的话来说: 共享库是一个目标模块,在运行或加载时,可以加载到任意的内存地址,并和一个在内存中的程序链接起来。...注意:阅读此文建议对动态链接库有一定的了解和使用经验,本文不是对动态链接库的介绍,有兴趣或者想深入动态链接库细节的可以参阅《深入理解计算机原理》这本书(文末有分享链接)。...),而-I(大写i)是指定头文件的路径: 将需要的.cpp直接编译成动态链接库A.so即可。...隐式链接 一种叫load time dynamic linking,就是说你的代码里面已经直接调用了库里面的函数,那么在link的时候会把该库的一小段lib link进去(而Linux上直接链接.so

    1.3K30

    使用CEF(七)详解macOS下基于CEF的多进程应用程序CMake项目搭建

    如果我们把主进程和子进程分离到两个Bundle,主进程所在Bundle获取某些系统权限,而渲染进程获取某些必要权限,就能做到主进程和子进程权限分离的目的,为安全性提供了一定保证。...库链接 libcef_dll_wrapper # 该变量来自cef_variables.cmake中定义的配置 # 主要是针对不同的平台,链接对应平台的一些标准库...例如,在Windows下我们可能需要gdi32.lib,在Linux构建窗体可能需要X11库,以及在macOS下需要Cocoa、AppKit等框架库。...set(CEF_APP_HELPER_OUTPUT_NAME "cef_app Helper") # 注意,上述的名称都不是最终名称,它们更准确的意义是作为下面循环定义target的基础名称 # 后续循环的时候..."cef_app Helper") # 注意,上述的名称都不是最终名称,它们更准确的意义是作为下面循环定义target的基础名称 # 后续循环的时候,会基于上述名称进行拼接 首先,我们会定义helper

    1.5K10

    CMake 秘籍(六)

    库的基本名称是message,而不是目标名称message-shared:在构建时将生成libmessage.so.1。...静态库上的额外目标属性如下: ARCHIVE_OUTPUT_NAME "message":这将确保库文件的名称只是 message,而不是 message-static。...为什么我们选择这种方法而不是在第 3 个菜谱中展示的使用OBJECT库的方法,即“构建和链接静态和共享库”,在第一章“从简单的可执行文件到库”中?OBJECT库负责编译库的第一步:从源代码到对象文件。...我们使用名称_build_dir而不是简单的build的原因是,在测试本地安装时,您的项目可能已经包含一个build目录,这会与新安装发生冲突。...这也是我们使用lib作为安装目标DESTINATION而不是CMAKE_INSTALL_LIBDIR的原因,否则可能会让account/__init__.py感到困惑。

    1.1K00

    CMake 秘籍(五)

    输出日志选项LOG_BUILD和LOG_INSTALL指示ExternalProject_Add为构建和安装操作编写日志文件,而不是输出到屏幕。...我们将使用FetchContent或ExternalProject_Add在配置时下载所有必需的 Google Test 源码,并且在本菜谱中只关注在配置时获取依赖,而不是实际的源码及其单元测试。...) project(recipe-01 LANGUAGES Fortran C) 我们指示 CMake 在构建目录的lib子目录下保存静态和共享库。...每个编译器在生成机器代码时都会执行名称重整,不幸的是,这项操作的约定并不是通用的,而是依赖于编译器。...这可以通过使用add_library的MODULE选项并阻止在我们的库目标名称中添加任何前缀(例如,Unix 系统上的lib)来实现。

    2.3K20

    NDK 开发环境配置

    编译好的文件,包括支持的各种硬件等信息,有点类似于build.gradle文件明确Gradle如何编译APP; cpp文件夹:存放C/C++代码文件,native-lib.cpp文件默认生成的; CMakeLists.txt...:cmake脚本配置文件,cmake会根据该脚本文件中的指令去编译相关的C/C++源文件,并将编译后产物生成共享库或静态块,然后Gradle将其打包到APK中。...         # 生成函数库的名称,即libnative-lib.so或libnative-lib.a(lib和.so/.a默认缺省)        JNILearning         #生成库类型...        # 设置path变量的名称,这里为NDK中的日志库         log-lib         #指定cmake查询库的名称         #即在ndk开发包中查询liblog.so...按照构建脚本中的命令将 C++ 源文件 native-lib.cpp 编译到共享的对象库中,并命名为 libnative-lib.so,Gradle 随后会将其打包到 APK 中; 运行时,应用的 MainActivity

    2.2K10
    领券