CMake 围炉札记

在这里插入图片描述

文章目录

  • 一、CMake
  • 二、CMake 的一些用法
    • 1、指定 utf8 编码
    • 2、cmake rpath
    • 3、cmake 编译Release版本
    • 4、cmake重新编译
    • 5、cmake 不优化
    • 6、cmake 设置定义
    • 7、cmake 生成动态库
    • 8、cuda


一、CMake

CMake 教程
Cmake官方教程解析
跨平台编译
VSCode 和 CLion
Android CMake/JNI

二、CMake 的一些用法

1、指定 utf8 编码

// 1
add_compile_options("/source-charset:utf-8")
add_compile_options("/execution-charset:utf-8")

// 2
add_compile_options(-utf-8)

// 3
add_compile_options(/utf-8)

// 4
add_compile_options("$<$<C_COMPILER_ID:MSVC>:/utf-8>")
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")

add_executable(t1 hello.cpp)

// 5
target_compile_options(t1 PUBLIC -utf-8)
target_compile_options(t1 PUBLIC /utf-8)
target_compile_options(t1 PUBLIC /execution-charset:utf-8)

2、cmake rpath

set(CMAKE_SKIP_BUILD_RPATH FALSE)  
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) 
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) 
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib;./")  
// ; 进行分割

// set_target_properties(目标文件 PROPERTIES INSTALL_RPATH 路径列表)

CMAKE和RPATH
gcc和cmake编译
Linux -L, -l, -rpath, -rpath-link, LD_LIBRARY_PATH和RUNPATH使用说明
解释Linux中的共享库路径(RPATH和RUNPATH)的区别和用途
Linux平台关于可执行程序的动态库加载路径(rpath)的查看与修改

查看RPATH:

readelf -d libxx.so | grep path
0x000000000000000f (RPATH)              Library rpath: [/home/3rdParty/lib_linux:/usr/local/lib]

3、cmake 编译Release版本

# windows:
cmake --build . --config Release

# linux:
cmake .. -DCMAKE_BUILD_TYPE=Release

4、cmake重新编译

删除文件夹下的文件 rm CMakeCache.txt 重新编译即可

5、cmake 不优化

    if (CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
        list(APPEND DisableOptimization -Od)
    endif ()
    add_compile_options(${DisableOptimization})
//   target_compile_options(t1 PUBLIC -utf-8)

6、cmake 设置定义

add_compile_definitions(INFERENCE_MNN)
// target_compile_definitions(t1 PUBLIC INFERENCE_MNN)

7、cmake 生成动态库

set(CMAKE_POSITION_INDEPENDENT_CODE ON)

8、cuda

project(ft C CXX)
if (INFERENCE_TensorRT)
    enable_language(CUDA)
    if (NOT DEFINED CMAKE_CUDA_ARCHITECTURES)
        set(CMAKE_CUDA_ARCHITECTURES 70 75 80)
    endif (NOT DEFINED CMAKE_CUDA_ARCHITECTURES)
endif ()

add_library(cuLib OBJECT ${CU_SRCS})

if (INFERENCE_TensorRT)
    set_target_properties(sdk PROPERTIES CUDA_SEPARABLE_COMPILATION ON)
endif ()

project(ft C CXX CUDA) 与 enable_language(CUDA) 同样效果

或者

find_package(CUDA REQUIRED)
// set(CUDA_MIN_VERSION "8.0")
// find_package(CUDA ${CUDA_MIN_VERSION})
cuda_add_library(cuLib STATIC ${CU_SRCS})

find_package( [version] [EXACT] [QUIET] [MODULE]
[REQUIRED] [[COMPONENTS] [components…]]
[OPTIONAL_COMPONENTS components…]
[NO_POLICY_SCOPE])cs

cmake之find_pakage(详细版)

   

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/432644.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mac报错:zsh:command not found: brew

1、基本概述&#xff1f; 在使用brew安装程序的时候MAC提示&#xff1a; zsh:command not found: brew 本质就是brew没有安装&#xff0c;这个命令与linux系统中的yum命令类似。 使用的环境说明&#xff1a; 虚拟机版本&#xff1a;VMware Workstation 17 Pro mac os Ventu…

【风格迁移】StyTr2:引入 Transformer 解决 CNN 在长距离依赖性处理不足和细节丢失问题

StyTr2&#xff1a;引入 Transformer 解决 CNN 在长距离依赖性处理不足和细节丢失问题 提出背景StyTr2 组成StyTr2 架构 全流程优化原始子解法&#xff1a;VGG网络做内容特征提取替换子解法&#xff1a;使用GANs中的判别器进行特征提取 提出背景 论文&#xff1a;https://arxi…

如何选学生用的台灯?三分钟看懂护眼台灯怎么选!

其实仔细观察与经历过来的父母都知道&#xff0c;孩子从小用眼健康&#xff0c;最为重要的就是从他们开始坐到书桌前的那一时刻开始的&#xff0c;尤其是桌上的那一盏台灯。市面上很多劣质台灯&#xff0c;它们往往在许多看不见的细节上偷工减料&#xff0c;列如使用低质量处理…

持续更新 | 与您分享 Flutter 2024 年路线图

作者 / Michael Thomsen Flutter 是一个拥有繁荣社区的开源项目&#xff0c;我们致力于确保我们的计划公开透明&#xff0c;并将毫无隐瞒地分享从问题到设计规范的所有内容。我们了解到许多开发者对 Flutter 的功能路线图很感兴趣。我们往往会在一年中不断更改并调整这些计划&a…

MySQL--优化(索引)

MySQL–优化&#xff08;SQL语句执行慢&#xff0c;如何分析&#xff09; 定位慢查询SQL执行计划索引 存储引擎索引底层数据结构聚簇和非聚簇索引索引创建原则索引失效场景 SQL优化经验 索引 索引&#xff08;index&#xff09;是帮助 MySQL 高效获取数据的数据结构&#xff…

深入浅出Redis(四):Redis基于RDB、AOF的持久化

引言 Redis是一款基于内存的键值对数据结构存储系统&#xff0c;Redis基于内存且常用来缓存关系型数据库中的数据&#xff0c;但不代表着Redis不能进行持久化&#xff0c;本篇文章将深入浅出的说明Redis基于RDB和AOF的持久化方式 Redis支持两种持久化方式&#xff0c;RDB&…

Redis 缓存机制如何提高应用程序的性能?

在数字时代&#xff0c;一拍脑门儿我们就能感觉到信息的海量和处理速度的迫切。不管是刷个微博、下个单&#xff0c;还是玩个游戏&#xff0c;我们都希望能快上加快&#xff0c;一点不拖泥带水。这时候&#xff0c;缓存技术就扮演了个大英雄的角色&#xff0c;它能让数据存取的…

【排序】详解插入排序

一、思想 插入排序是通过构建有序序列&#xff0c;对于未排序数据&#xff0c;在已排序序列中从后向前扫描&#xff0c;找到相应位置并插入。具体步骤如下&#xff0c;将数组下标为0的元素视为已经排序的部分&#xff0c;从1开始遍历数组&#xff0c;在遍历的过程中当前元素从…

完美解决VMware中配置suse10虚拟机网络

一、注意&#xff01;&#xff01;&#xff01;配置suse10网络&#xff0c;需要在虚拟机关机状态下进行&#xff0c;否则会配置不成功&#xff1b; 二、配置与主机在同一网段(仅主机模式&#xff0c;网卡一)&#xff1b; 在suse系统关机状态下&#xff0c;Vmware中设置”虚拟网…

【每日一题】1976. 到达目的地的方案数-2024.3.5

题目: 1976. 到达目的地的方案数 你在一个城市里,城市由 n 个路口组成,路口编号为 0 到 n - 1 ,某些路口之间有 双向 道路。输入保证你可以从任意路口出发到达其他任意路口,且任意两个路口之间最多有一条路。 给你一个整数 n 和二维整数数组 roads ,其中 roads[i] = […

gofly接口入参验证使用介绍

接口传入的参数做相关性质验证是开发中较为常用&#xff0c;gofly框架内置校验工具&#xff0c;提供开发效率&#xff0c;开发接口简单调用即可实现验证&#xff0c;下面介绍gofly框架数据验证设计思路及使用方法。 gofly框架提供了功能强大、使用便捷、灵活易扩展的数据/表单…

Java并发编程-进程和线程

一、进程和线程 1. 进程 什么是进程&#xff1f; 简单来说&#xff0c;进程就是程序的一次启动和执行。进程是操作系统中的一个概念&#xff0c;它代表正在运行的程序的实例。每个进程都有自己的内存空间、代码和数据&#xff0c;以及其他操作系统资源&#xff0c;如文件和设备…

数据结构与算法-希尔排序

引言 在计算机科学中&#xff0c;数据结构和算法是构建高效软件系统的基石。而排序算法作为算法领域的重要组成部分&#xff0c;一直在各种应用场景中发挥着关键作用。今天我们将聚焦于一种基于插入排序的改进版本——希尔排序&#xff08;Shell Sort&#xff09;&#xff0c;深…

优思学院|质量和企业的盈利能力有何关系?

质量和企业的盈利能力有何关系&#xff1f;三十年前&#xff0c;这个问题就已经被提出。当时的学者们研究了高质量产品如何带来更高的盈利。虽然这听起来像是老生常谈&#xff0c;但它的真理至今仍深深影响着我们的商业决策。 为了更直观地理解&#xff0c;一些学者绘制了以下…

力扣大厂热门面试算法题 - 滑动窗口

最长和谐子序列、重复的DNA序列、找到字符串中所有字母异位词、滑动窗口最大值、最小区间。每题做详细思路梳理&#xff0c;配套Python&Java双语代码&#xff0c; 2024.03.06 可通过leetcode所有测试用例。 目录 594. 最长和谐子序列 解题思路 完整代码 Java Python …

亚信安慧AntDB:数据库自主创新的缩影

AntDB作为一款自主研发的数据库系统&#xff0c;具备了国产化升级改造的核心能力。这款数据库系统通过不懈努力和持续探索&#xff0c;实现了从跟随他人到引领潮流的华丽转身。AntDB不仅仅是一种技术产品&#xff0c;更是体现了自主研发能力的缩影&#xff0c;体现了科技企业在…

基于SSM的农业信息管理系统的设计与实现(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的农业信息管理系统的设计与实现&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;…

Spring Test 常见错误

前面我们介绍了许多 Spring 常用知识点上的常见应用错误。当然或许这些所谓的常用&#xff0c;你仍然没有使用&#xff0c;例如对于 Spring Data 的使用&#xff0c;&#xff0c;有的项目确实用不到。那么这一讲&#xff0c;我们聊聊 Spring Test&#xff0c;相信你肯定绕不开对…

网络编程,IO多路复用

1.使用IO多路复用完成TCP并发服务器 #include<myhead.h> #define SER_PORT 8888 //服务器端口号 #define SER_IP "192.168.124.10" //服务器IP地址int main(int argc, const char *argv[]) {//1、创建用于连接的套接字int sfd socket…

Elasticsearch从入门到精通-02环境搭建

Elasticsearch从入门到精通-02环境搭建 &#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是程序员行走的鱼 &#x1f342;博主从本篇正式开始ES学习&#xff0c;希望小伙伴可以一起探讨 &#x1f4d6; 本篇主要介绍和大家一块学习一下ES环境搭建,主要包括Elasticsearch、…