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

目录
相关文章
|
8月前
|
Linux 编译器 C语言
《Linux从练气到飞升》No.05 Linux编译器gcc/g++的使用及编译过程 【云边有个小卖部】上新
《Linux从练气到飞升》No.05 Linux编译器gcc/g++的使用及编译过程 【云边有个小卖部】上新
172 0
|
存储 Ubuntu Shell
生信技巧 | GNU 并行操作
生信技巧 | GNU 并行操作
120 0
|
5月前
|
Linux
BuildRoot 围炉夜话
BuildRoot 围炉夜话
80 9
|
6月前
|
自然语言处理 Linux C++
make和Cmake都有什么区别?(内附使用详解)
make: 是一个构建工具,它的任务是读取 Makefile 文件,并基于这些文件中的指令执行具体的构建操作。Makefile 文件包含了如何构建项目的规则,make 负责解析这些规则并执行必要的命令来编译和链接源代码,生成可执行文件或库。 CMake: 是一个构建系统生成器。它并不直接进行编译或链接,而是根据项目中 CMakeLists.txt 文件的内容生成一个或多个构建系统的描述文件(如 Makefile 或 Visual Studio 解决方案)。CMake 提供了一种更高级、更抽象的方式来描述构建过程,这使得它能够跨平台地生成各种构建系统。
549 0
|
7月前
|
数据可视化 vr&ar 图形学
技术好文:VTK初识VTK
技术好文:VTK初识VTK
52 0
|
并行计算 关系型数据库 MySQL
Cmake 使用备忘
Cmake 使用备忘
|
C语言 C++
cygwin的下的gcc的一点体会。
cygwin的下的gcc的一点体会。
|
Linux 测试技术 API
移植tslib库 [五一勋章]
移植tslib库 [五一勋章]
159 0
移植tslib库 [五一勋章]
|
编译器 C语言 Windows
问题集锦:Windows下使用CMake编译cocos2d-x
问题集锦:Windows下使用CMake编译cocos2d-x
367 0
CMake教程9:cocos2d-x的CMake逻辑分析
CMake教程9:cocos2d-x的CMake逻辑分析
250 0