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

目录
打赏
0
11
12
2
123
分享
相关文章
Cmake的使用
CMake的安装和使用,通过一个简单的项目示例,展示了如何编写CMakeLists.txt文件和main.cpp程序,以及如何通过CMake生成构建文件并编译项目。
105 0
CMake中使用vcpkg
vcpkg是一个微软开源的C++包管理器。 在以前的开发中,如果在项目中需要使用某个开源库,例如qt,我们需要取官网下载qt的源码,然后构建得到对应的库,然后在项目中链接这个库。对于自己熟悉的库还好说,若是不熟悉的库,如何拉取源码?如何构建?如何在项目中引用?等等这些问题通常会困扰我们,然而,大多数情况下,我们只是使用这个开源库,并不需要关心这个库的构建和编译等问题。如此,在以前的开发过程中,往往会花费不少的时间在引入开源库上。 vcpkg是在背景下开发出来的,通过vcpkg,我们可以在项目中很方便的引入开源库,不用再关心拉取代码、构建开源库的这些事情。 CMake构建的项目中引入开源库
243 0
cmake安装与使用
cmake安装与使用
386 0
cmake安装与使用
CMake
CMake
166 0