CMake 围炉札记

简介: CMake 围炉札记

一、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(详细版)

目录
相关文章
|
4月前
|
Linux 编译器 C语言
《Linux从练气到飞升》No.05 Linux编译器gcc/g++的使用及编译过程 【云边有个小卖部】上新
《Linux从练气到飞升》No.05 Linux编译器gcc/g++的使用及编译过程 【云边有个小卖部】上新
141 0
|
22天前
|
Linux
BuildRoot 围炉夜话
BuildRoot 围炉夜话
63 9
|
1月前
|
Linux Shell 数据库
【绝技大公开】Linux文件查找新招式:打破常规,探索那些鲜为人知的技巧,让你成为真正的文件追踪大师!
【8月更文挑战第13天】文件查找是Linux用户必备技能,能大幅提升工作效率。本文介绍几种高效查找方法,包括使用`column`美化`find`输出、利用`locate`和`mlocate`快速搜索、编写脚本自动化任务、采用`fd`现代工具提升查找体验,以及结合`grep`和`rg`搜索文件内容。此外,还推荐了`Gnome Search Tool`和`Albert`等图形界面工具,为用户提供多样选择。掌握这些技巧,让你的工作更加得心应手。
37 2
|
1月前
|
编译器 开发工具 C语言
解锁QtCreator跨界神技!Windows下轻松驾驭OpenCV动态库,让你的跨平台开发如虎添翼,秒变视觉编程大师!
【8月更文挑战第4天】QtCreator是一款强大的跨平台IDE,便于创建多平台应用。本教程教你如何在Windows环境下集成OpenCV库至Qt项目。首先,下载匹配MinGW的OpenCV预编译版并解压。接着,在QtCreator中新建或打开项目,并在.pro文件中添加OpenCV的头文件和库文件路径。确保编译器设置正确。随后编写测试代码,例如加载和显示图片,并进行编译运行。完成这些步骤后,你就能在QtCreator中利用OpenCV进行图像处理开发了。
104 6
|
4月前
|
运维 监控 Linux
不是所有的Linux工具都会让人惊叹,但这个绝对让你叫绝
【4月更文挑战第3天】不是所有的Linux工具都会让人惊叹,但这个绝对让你叫绝
62 0
不是所有的Linux工具都会让人惊叹,但这个绝对让你叫绝
|
监控 算法 测试技术
神奇的仙丹,性感的Elixir
神奇的仙丹,性感的Elixir
神奇的仙丹,性感的Elixir
|
Linux 测试技术 API
移植tslib库 [五一勋章]
移植tslib库 [五一勋章]
129 0
移植tslib库 [五一勋章]
|
机器学习/深度学习 人工智能 算法
PyHubWeekly | 第二十期:动漫迷不能错过的一款Python小工具!
PyHubWeekly每周定期更新,精选GitHub上优质的Python项目/小工具。 我把PyHubWeekly托管到了Github,感兴趣的可以搜索Github项目PyHubWeekly[1],如果喜欢,麻烦给个Star支持一下吧。此外,欢迎大家通过提交issue来投稿和推荐自己的项目~ 本期为大家推荐GitHub上5个优质的Python项目,它们分别是: •AnimeGAN •faker •Background-Matting •PyBoy •Learning-to-See-in-the-Dark
PyHubWeekly | 第二十期:动漫迷不能错过的一款Python小工具!