首页 > 其他分享 >双笙仔佯谬_小彭老师_CMake课程笔记

双笙仔佯谬_小彭老师_CMake课程笔记

时间:2023-06-07 14:14:34浏览次数:31  
标签:佯谬 CMake target fmt add 模块 头文件 cmake 双笙

目录

CMake

  • 可以通过-D选项设置编译器和cpp版本

    1. cmake -Bbuild -DCMAKE_CXX_COMPILER=/usr/bin/gcc-6 可以指定使用gcc-6编译
    2. cmake -Bbuild -DCMAKE_CXX_STANDARD=14 用c++14版本
  • 使用add_libaray生成动态链接库或静态链接库

    1. add_libaray(mylib STATIC add.cpp)add_libaray(mylib SHARED add.cpp)
  • add_subdirtory添加子模块

    1. 复杂的项目一般都是有很多个子模块的
    2. 主CMakeLists.txt可以add_subdirtory(myadd)
  • 子模块的头文件如何处理 47分29秒
    3. 自动引用子模块的头文件:可以子模块的CMakeLists.txt里添加target_include_directories(mylib PUBLIC . ) 使用了PUBLIC于是引用了mylib的人就可以使用头文件了

    展开查看:49分05秒截图-带target和不带target的区别 drawing
  • 添加一个宏定义

    1. 在cmake里写target_add_difinitions(mylib PUBLIC MY_MACRO=1)就相当于在代码里添加了#define MY_MACRO 1,
  • 添加一个编译选项

    1. target_compile_options(myapp PUBLIC -fopenmp)就相当于在编译时添加了-fopenmp参数g++ -fopenmp -o myapp xxx

第三方库

  1. 第三方库分为3种,纯头文件库[1],可以作为子模块的库[2],必须预安装的库[3]
    • 纯头文件库,只需要将头文件下载下来,然后用include_directorys(spdlog/include)即可,缺点是编译慢

      展开查看:小彭老师cmake第58分50秒截图一些常用的head_only的库 drawing
    • 作为子模块的库,先把库下载下来,放到目录里,让后使用add_subdirectory(fmt)target_link_libaraies(main PUBLIC fmt),就可以了
      好处是比head_only的引入方式编译快

      展开查看:小彭老师cmake第1时08分截图用子模块的方式引入fmt库 drawing
    • 系统预安装的库,首先我们引入库可能会出现菱形依赖问题,比如spdlog自带了fmt库,如果我们想要引入fmt和spdlog就会有菱形依赖问题,
      使用系统预安装的方式就可以避免菱形依赖问题,因为系统预安装的方式会查找缓存,缓存里有fmt::fmt了就不会再引入了
      具体使用方法就是find_package()target_link_libaraies

      展开查看:小彭老师cmake第1时14分截图用系统预按装的方式 drawing drawing

  1. 他简单介绍了glm这个好用的数学库,像opencv一样有vec和mat
  2. 标准库里有个std::valarry的东西,可以把array里的东西全部作一遍操作,比如valarry arr(1.0,2.0,3.0),当使用arr2 = std::sin(arr * pi)时,arr2就是(3.14,6.18,9.42)

可以configure,install等

标签:佯谬,CMake,target,fmt,add,模块,头文件,cmake,双笙
From: https://www.cnblogs.com/majiao61/p/17296629.html

相关文章

  • Ubuntu升级Cmake的正确方式
     Ubuntu升级Cmake的正确方式某些软件包编译时需要高版本的Cmake,因此需要升级Cmake。不能使用sudoapt-getremovecmake卸载低版本cmake后再重装高版本,这样做会导致之前编译和安装的很多库一起被卸载!!! 正确步骤是:去https://cmake.org/files/下载所需版本的源码。也可......
  • CMakeLists.txt 编写模板
     新建文件  CMakeLists.txt #设置cmake的最低版本cmake_minimum_required(VERSION2.8)#指定为C++11版本set(CMAKE_CXX_STANDARD11)#设置工程名称project(wss)message(${PROJECT_SOURCE_DIR})set(SRC_LIST${PROJECT_SOURCE_DIR}/src/websocket_s......
  • ubuntu 20.04安装(升级)cmake
    ubuntu20.04安装(升级)cmake-知乎(zhihu.com)    ......
  • CMakeLists --- install和uninstall
    install假设生成了以下几个文件:静态库target1,动态库target2,可执行文件target3 1.安装文件至指定位置#只安装静态库install(TARGETStarget1LIBRARYDESTINATIONlib)#安装静态库,动态库,可执行文件install(TARGETStarget1target2target3LIBRARYDESTINATIONli......
  • [转]关于Visual Studio:如何使用cmake检测64位MSVC?
    1、如何使用cmake检测64位MSVC?2、关于VisualStudio:如何使用cmake检测64位MSVC?......
  • CMake入门
    CMakecmake的定义是--高级编译配置工具当多人用不同的语言或者编译器开发一个项目,最终要输出一个可执行文件或者共享库(dll,so等等)这时候就需要用到------CMake所有操作都是通过编译CMakeLists.txt来完成的官方网站是www.cmake.org学习CMake的目的,为将来处理大型的C/C++......
  • [CMake] CMake学习笔记
    自己的学习和使用总结,还不完善,不定时更新。一.简介cmake是一款高级编译配置工具;所有操作都是通过编译CMakeLists.txt来完成的;CMake官方全部推荐使用大写指令;学习目的:为将来处理大型的C/C++、Java项目做准备;环境:Ubuntu:20.04cmake:3.16.3简单尝试:用C++写......
  • CMake Commands
    cmake_minimum_requiredcmake_minimum_required(VERSION<min>[...<policy_max>][FATAL_ERROR])#限制CMake的版本支持范围cmake_minimum_required(VERSION3.16.3)#限制CMake最低版本3.16.3cmake_minimum_required(VERSION3.16.3...3.20.0)#限制CMake版本最低3.16.3,只要C......
  • CMake Variables
    变量说明CMAKE_SOURCE_DIR源代码所在目录就是根cmakelists.txt所在目录CMAKE_BINARY_DIR跑cmake命令的目录CMAKE_BUILD_TYPE构建类型DebugReleaseRelWithDebInfoMinSizeRelCMAKE_MODULE_PATHcmake的模块路径以;分隔RUNTIME_OUTPUT_DIRECTORYCMAKE_C_......
  • CMake构建指南:如何提高C/C++项目的可维护性
    如果您是一位C/C++开发人员,那么您一定知道在编写和维护大型项目时所面临的挑战。这些项目通常包含大量的源代码、库和依赖项,需要耗费大量的时间和精力才能构建和维护。在这种情况下,使用自动化工具可以大大减轻您的负担,提高项目的可维护性。CMake就是这样一款工具,它可以自动化C/C+......