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

目录
相关文章
|
7月前
|
Linux 编译器 C语言
《Linux从练气到飞升》No.05 Linux编译器gcc/g++的使用及编译过程 【云边有个小卖部】上新
《Linux从练气到飞升》No.05 Linux编译器gcc/g++的使用及编译过程 【云边有个小卖部】上新
159 0
|
4月前
|
Linux
BuildRoot 围炉夜话
BuildRoot 围炉夜话
73 9
|
4月前
|
Java 虚拟化 数据安全/隐私保护
MacOs 围炉夜话
MacOs 围炉夜话
86 10
|
4月前
|
传感器 Go C语言
Go 围炉札记
Go 围炉札记
48 2
|
Python
【端午趣味征文】有vcs和python吗?来,我教你在波形里画个粽子!
【端午趣味征文】有vcs和python吗?来,我教你在波形里画个粽子!
|
编译器 C语言 C++
静态链接库,动态链接库【滴水逆向三期48笔记】(下)
静态链接库,动态链接库【滴水逆向三期48笔记】(下)
|
编译器 C++
静态链接库,动态链接库【滴水逆向三期48笔记】(上)
静态链接库,动态链接库【滴水逆向三期48笔记】
|
运维 JavaScript 前端开发
鸽了 3 年的 Egg 3.0 带来了一个好消息!
鸽了 3 年的 Egg 3.0 带来了一个好消息!
242 0
|
Linux 测试技术 API
移植tslib库 [五一勋章]
移植tslib库 [五一勋章]
149 0
移植tslib库 [五一勋章]
艾伟:MSBuild 简解
  从最原始的编译器,逐渐到 Shell 命令组合、Make工具,到现在的针对性 Build 工具,Rake、Ant、MSBuild,甚至于 PowerShell 这样的工具;都为我们软件开发以及系统管理做出了贡献,我甚至不能想象几十年前使用编译器生成程序的复杂步骤(其实就是把 makefile 拆开,相当恐怖)。
1275 0