文章目录
摘要
- CMake小抄
- git小抄
- cuda编程小抄
CMake小抄
CMake常用功能
CMake常用命令
#//TODO:作用,含义,注意事项(如绝对路径相对路径等)
add_library(hello SHARED ${PROJECT_SOURCE_DIR}/libhello/hello.c)
命令 | 说明 |
---|---|
add_definitions(-DFOO -DBAR …) | 添加预定义宏FOO(和BAR?)相当于VS里的预处理器, |
aux_source_directory(. DIR_SRCS) | 查找当前目录下的所有源文件,并将名称保存到 DIR_SRCS 变量 |
CMake常用变量
变量名 | 变量说明 |
---|---|
PROJECT_NAME | 返回通过PROJECT指令定义的项目名称 |
PROJECT_SOURCE_DIR | 有时候一个项目有多个子目录,包含多个CMakeLists.txt,该变量返回最接近的一个CMakeLists.txt所在目录的地址 |
CMAKE_SOURCE_DIR | CMakeLists.txt的顶级目录地址 |
PROJECT_BINARY_DIR | 运行cmake命令的目录,通常是PROJECT_SOURCE_DIR下的build目录 |
CMAKE_MODULE_PATH | 定义自己的cmake模块所在的路径 |
CMAKE_CURRENT_SOURCE_DIR | 当前处理的CMakeLists.txt所在的路径 |
CMAKE_CURRENT_LIST_DIR | 当前文件夹路径 |
CMAKE_CURRENT_LIST_FILE | 输出调用这个变量的CMakeLists.txt的完整路径 |
CMAKE_CURRENT_LIST_LINE | 输出这个变量所在的行 |
EXECUTABLE_OUTPUT_PATH | 生成可执行文件路径 |
LIBRARY_OUTPUT_PATH | 生成库的文件夹路径 |
CMAKE_BUILD_TYPE | 指定基于make的产生器的构建类型(Release,Debug) |
CMAKE_C_FLAGS | *.C文件编译选项,如 -std=c99 -O3 -march=native |
CMAKE_CXX_FLAGS | *.CPP文件编译选项,如 -std=c++11 -O3 -march=native |
CMAKE_CURRENT_BINARY_DIR | target编译目录 |
CMAKE_INCLUDE_PATH | 环境变量,非cmake变量 |
CMAKE_LIBRARY_PATH | 环境变量 |
CMAKE_STATIC_LIBRARY_PREFIX | 静态库前缀, Linux下默认为lib |
CMAKE_STATIC_LIBRARY_SUFFIX | 静态库后缀,Linux下默认为.a |
CMAKE_SHARED_LIBRARY_PREFIX | 动态库前缀,Linux下默认为lib |
CMAKE_SHARED_LIBRARY_SUFFIX | 动态库后缀,Linux下默认为 .so |
BUILD_SHARED_LIBS | 如果为ON,则add_library默认创建共享库 |
CMAKE_INSTALL_PREFIX | 配置安装路径,默认为/usr/local |
CMAKE_ABSOLUTE_DESTINATION_FILES | 安装文件列表时使用ABSOLUTE DESTINATION 路径 |
CMAKE_AUTOMOC_RELAXED_MODE | 在严格和宽松的automoc模式间切换 |
CMAKE_BACKWARDS_COMPATIBILITY | 构建工程所需要的CMake版本 |
CMAKE_COLOR_MAKEFILE | 开启时,使用Makefile产生器会产生彩色输出 |
CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS | 用来控制IF ELSE语句的书写方式 |
git小抄
git常用功能
git常见问题
- 修改.gitignore文件后不起作用/不生效
- git status 显示中文和解决中文乱码
- git bash终端输入命令:
git config --global core.quotepath false
- git bash终端输入命令:
github功能
CUDA编程小抄
cuda库
- thrust | Thrust是基于标准模板库(STL)的CUDA的C ++模板库。通过Thrust,您可以通过可与CUDA C完全互操作的高级接口,以最少的编程工作来实现高性能并行应用程序。
cuda内存部分
- CUDA统一内存、零复制内存、锁页内存
CUDA 资料
- CUDA,NVIDIA Driver,Linux,GCC之间的版本对应关系表格
- CUDA:NVCC编译过程和兼容性详解
- CUDA与gcc版本
- NVIDIA GPU的计算能力查询:WIKI百科,或者NVIDIA GPU的计算能力 Compute Capability 一览
- Cuda 相关库的介绍
- cuda相关的一系列官方工具、库
- CUDA编程——zero copy
- CUDA版本与显卡驱动版本对应问题:CUDA Toolkit and Compatible Driver Versions
- NVIDIA显卡硬编码调研
- NVIDIA官方总结的GPU性能分析工具
- 设置VScode支持.cu文件语法高亮及跳转的方法
C++小抄
C++ 离散知识点
- 在不同源文件可define同一个宏(宏作用域为从#define开始到当前源文件结束)
- 防止头文件重复包含指的是:防止某个源文件重复包含同一个头文件两次,但是同一个头文件可以同时被不同源文件各包含一次。
- 类一般在头文件中定义,在类内定义的函数默认是
内联(inline)
的,而在类内声明,在类外定义的函数则不默认为内联(inline)
。 - 头文件内定义的变量会自动被加上
extern
。 - 在头文件里定义函数的几种方法:
- 声明类,在类中定义静态成员函数,并在头文件中实现函数。
- 使用模板函数(其要求声明和定义都在头文件中)
(没有试过)
。 - 定义为内联函数
inline
。
C++ 语法
- 负数求余和商都是负数。例如
-123 / 10 = -12
,-123 % 10 = -3
。 string
类型前要加std::
- 定义
std::string a="123456"
, 那么a[a.length() - 1] == '6'
而不是'\0'
。 char a = ''
会报错,因为不能初始化为空字符。至少也要是char a = '\0'
- 注意:栈
stack
没有reserve
方法。(TODO:C++ prime还是算法设计与分析中似乎有总结哪些结构含有reserve,看一下) - 注意vector的size是无符号的。例如
vector<int> aa;
,当aa.size()
为0时,aa.size()-1
不是-1而是一个无符号数的最大值。在所以建议以后i<aa.size()-1写为i+1<aa.size() - C++中,有符号类型数向右位移有点特殊,向右位移时,最左边补0还是补1好像得看机器具体实现。若总是补0则称为
logical shift
,若补符号位
则称为arithmetic shift
,目前C++的编译器似乎都是补符号位(即arithmetic shift
),例如10000000 >> 1
结果为11000000
。除了这种特殊情况,其他时候位移空缺的位都补0。(leetcode的C++编译器不能对负数右移也不能左移,不知道为啥,如-1>>1在运行时会报错,参考这里也报错,要把这个弄清楚,否则后序在线笔试时提交代码可能会出错) - C++中,有符号数和无符号数在一起进行运算时,首先会将有符号数按照其补码转换为无符号数,再进行运算。(其实可以这么看,机器不认有无符号,全都按照补码来进行计算,最后的结果是补码,按照无符号数的方式解读。)例:
结果是"a>b",因为a的补码是全1,被当成无符号数后为65535,那自然大于b。short a = -1; unsigned b = 1; if(a < b) printf("a<b"); else printf("a>b");
- C++变量未初始化的后果。未初始化的全局变量会自动初始化为0,未初始化的局部变量一般为乱码。参考这里。当然我觉得具体情况还得看编译器吧。
C++ 库函数
int isalnum ( int c )
:头文件\<ctype\>
,检查一个字符是不是字母或数字(alphanumeric)。int tolower(int c);
:头文件\<ctype\>
,将一个字符转换为小写字符。
相关/参考链接
CMake小抄:
git小抄:
- https://blog.csdn.net/mengzuchao/article/details/80490256
- https://www.cnblogs.com/zhuchenglin/p/7128383.html
CUDA编程小抄:
- a