liuyunbin / note Goto Github PK
View Code? Open in Web Editor NEWYunbin Liu's note
License: GNU General Public License v3.0
Yunbin Liu's note
License: GNU General Public License v3.0
Vim 是 Linux 下的一个编辑器
sudo apt install vim
set number
set tabstop=2
set shiftwidth=2
set expandtab
set cindent
EditorConfig 用于在不同的编辑器和 IDE 中保持相同的配置
打开文件时,将依次查找当前目录以及各个父目录中的配置文件 .editorconfig,
直到在配置文件中找到配置选项:root = true
注意:配置选项由顶层目录到当前目录的顺序查找,相同的配置将被覆盖
*
匹配任意字符( /
除外)**
匹配任意字符?
匹配任意单个字符[name]
匹配在 name 中的任意单个字符[!name]
匹配不在 name中 的任意单个字符{s1, s2, s3}
匹配给定的字符串中的任意一个{num1..mum2}
匹配在范围 [num1, num2] 中的任意数字root = true;
[]
end_of_line = cr
end_of_line = lf
end_of_line = crlf
charset = utf-8
trim_trailing_whitespace = true
trim_trailing_whitespace = false
insert_final_newline = true
insert_final_newline = false
indent_style = tab
indent_style = space
indent_size = 2
tab_width = 2
CMake 是一个构建工程的工具
$ sudo apt install cmake
$ mkdir -p build
$ cd build
$ cmake -DCMAKE_INSTALL_PREFIX=/usr ..
$ make
$ make test
$ make install
说明:内部编译会导致文件结构混乱,因此这里使用外部构建
cmake_minimum_required(VERSION min-version)
project(project-name)
message(STATUS "message to display")
message(FATAL_ERROR "message to display")
add_subdirectory(source-dir)
include_directories(include-dir)
link_directories(library-dir)
add_executable(executable-name source.cc)
target_link_libraries(executable-name library-name)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)
add_library(library-name SHARED source.cc)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/lib)
set_target_properties(
library-name-shared
PROPERTIES
VERSION 1.2 # 设置动态库的版本
SOVERSION 1) # 设置 API 版本
add_library(library-name STATIC source.cc)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/lib)
add_library(library-name-shared SHARED source.cc)
add_library(library-name-static STATIC source.cc)
set_target_properties(
library-name-shared
PROPERTIES
OUTPUT_NAME library-name) # 设置库文件的输出名字
set_target_properties(
library-name-static
PROPERTIES
OUTPUT_NAME library-name) # 设置库文件的输出名字
set_target_properties(
target # 对象名称
PROPERTIES
OUTPUT_NAME huge_number # 设置输出名称
OUTPUT_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/huge-number # 设置输出目录
VERSION 1.2 # 设置动态库的版本
SOVERSION 1 # 设置 API 版本
)
file(GLOB HEADERS "*.h") # 非递归
file(GLOB_RECURSE HEADERS "*.h") # 递归
install(TARGETS executable-name library-name-shared library-name-static
RUNTIME DESTINATION bin # 设置二进制文件的安装目录
LIBRARY DESTINATION lib # 设置动态库的安装目录
ARCHIVE DESTINATION lib) # 设置静态库的安装目录
install(FILES hearder-name.h
DESTINATION include) # 设置普通文件的安装目录
enable_testing()
add_test(test-name executable-name arg)
如果有多个值,将以分号分割,例如:如果设置 set(var a b c)
,${var}
的值将为:"a;b;c"
set(variable-name value)
add_custom_target(doc COMMAND doxygen doc/Doxyfile
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
CMAKE_PROJECT_NAME
CMKAE_SOURCE_DIR
CMKAE_BINARY_DIR
CMAKE_INSTALL_PREFIX
CMAKE_CXX_FLAGS
if(val)
command()
endif(val)
if(not val)
command()
endif(not val)
$ sudo apt install clang-format
$ clang-format main.cc
$ clang-format -i main.cc
$ clang-format -style=Google main.cc
$ clang-format --dump-config -style=Google > .clang-format
规范位于当前目录或任一父目录的文件 .clang-format 或 _clang-format 中(如果未找到文件,使用默认代码规范)
$ clang-format -style=file main.cc
$ dpkg -L clang-format | grep clang-format.py
function! Formatonsave()
let l:formatdiff = 1
py3f <path-to-this-file>/clang-format.py
endfunction
autocmd BufWritePre *.h,*.cc,*.cpp call Formatonsave()
说明:
<path-to-this-file>
指的是 clang-format.py 的目录let l:formatdiff = 1
的意思是只规范修改过的部分,可以用 let l:lines = "all"
取代,表示规范所有的内容Git 是一个分布式版本管理的工具
$ sudo apt install git
$ git config --global user.name liuyunbin
$ git config --global user.email [email protected]
$ git config --global core.editor vim
$ git config --list
$ ssh-keygen -t rsa -b 4096 -C [email protected]
将文件 ~/.ssh/id_rsa.pub 里的公钥添加到:https://github.com/settings/keys
在文件 .gitignore 中添加要忽略的文件或目录,规则如下:
#
开头的行将被忽略/
开头防止递归/
结尾表示目录!
开头,表示不忽略文件或目录*
匹配任意字符(不包括 /
)**
匹配任意字符[abc]
表示匹配方括号内的任意单个字符[0-9]
表示匹配范围 [0, 9] 内的任意单个个字符?
匹配任意单个字符注意:以下说明中均不包含被忽略的文件和目录
$ git init
$ git clone [email protected]:liuyunbin/liuyunbin-toys
未跟踪状态 ----> 已暂存状态 或 已修改状态 ----> 已暂存状态
$ git add README
$ git commit -m "message"
$ git commit -a -m "message"
$ git commit --amend
$ git status
$ git diff
查看暂存区域内的文件和 Git 仓库内的文件的差异
$ git diff --staged
$ git rm README
$ git rm --cached README
$ git mv file_from file_to
$ git log
已暂存状态 ----> 已修改状态
$ git reset HEAD README
已修改状态 ----> 已提交状态
$ git checkout -- README
$ git remote -v
$ git remote add <shortname> <url>
$ git fetch [remote-name]
$ git push origin master
$ git remote show origin
$ git remote rename pb paul
$ git remote rm paul
$ git tag
$ git branch
$ git branch test-branch
$ git checkout test-branch
$ git checkout -b test-branch
$ git checkout --orphan test-branch
$ git merge test-branch
$ git branch -d test-branch
$ git branch -r
$ git ls-remote (remote)
$ git pull
$ git push origin --delete serverfix
将 server-branch 分支变基到 master 分支
$ $ git rebase master server-branch
例如:括号不匹配,多或少分号,等等。
对于此类错误,慢慢调试吧。
对于此类错误,直接有约定的处理方式。
例如:程序需要从配置文件读入配置信息,如果配置文件不存在,直接使用默认配置,等等。
具体可分为:
new
返回 nullptr
,等等对于此类错误:
对于调用者的错误,有时,出于效率等的考虑,也可以不处理此类情况,例如:strcpy()
等等
优点
int
不会匹到 double
缺点
优点:
缺点:
所以: 个人建议,使用异常而不是错误代码
google-glog 是 Google 的一个开源的日志库
$ sudo apt install libgflags-dev
$ sudo apt install libgoogle-glog-dev
#include <glog/logging.h>
google::SetUsageMessage("How to use");
google::SetVersionString("1.0.0");
google::ParseCommandLineFlags(&argc, &argv, true);
google::InitGoogleLogging(argv[0]);
$ g++ main.cc -lgflags -glog
google-glog 日志分四类:INFO,WARNING,ERROR 和 FATAL。
对于 FATAL ,程序输出日志后将退出
$ --logtostderr=1 # 1,true 和 yes(大小写均可)意思相同
$ --logtostderr=0 # 0,false 和 no (大小写均可)意思相同
FLAGS_logtostderr = 1; # 1 和 true 意思相同
FLAGS_logtostderr = 0; # 0 和 false 意思相同
配置中 0 表示 INFO,1 表示 WARNING,2 表示 ERROR,3 表示 FATAL
$ --stderrthreshold=2
FLAGS_stderrthreshold = 2;
配置中 0 表示 INFO,1 表示 WARNING,2 表示 ERROR,3 表示 FATAL
$ --minloglevel=0
FLAGS_minloglevel = 0;
$ --log_dir=/tmp
FLAGS_log_dir = "/tmp";
$ --colorlogtostderr=1 # 1,true 和 yes(大小写均可)意思相同
$ --colorlogtostderr=0 # 0,false 和 no (大小写均可)意思相同
FLAGS_colorlogtostderr = 1; # 1 和 true 意思相同
FLAGS_colorlogtostderr = 0; # 0 和 false 意思相同
LOG(INFO) << "message";
LOG_IF(INFO, a > 0) << "message";
CHECK(a > 0) << "message";
CHECK_EQ(a, b) << "message";
CHECK_NE(a, b) << "message";
CHECK_NOTNULL(p);
PLOG();
PLOG_IF();
PCHECK();
$ sudo apt install graphviz
$ sudo apt install doxygen
$ doxygen -g <config-file>
$ doxygen -s -g <config-file>
$ doxygen <config-file>
DOXYFILE_ENCODING = UTF-8
PROJECT_NAME = "project-name"
PROJECT_NUMBER = "1.0.0"
PROJECT_BRIEF = "这是项目描述"
PROJECT_LOGO = ""
INPUT = src
FILE_PATTERNS = *.cc *.h
EXCLUDE =
EXCLUDE_PATTERNS =
INPUT_ENCODING = UTF-8
RECURSIVE = NO
EXTRACT_ALL = NO
EXTRACT_PRIVATE = NO
EXTRACT_STATIC = NO
SOURCE_BROWSER = NO
VERBATIM_HEADERS = YES
OUTPUT_DIRECTORY = doc
MARKDOWN_SUPPORT = YES
USE_MDFILE_AS_MAINPAGE = README.md
OUTPUT_LANGUAGE = Chinese
其它配置选项见:http://www.doxygen.nl/manual/config.html
/** 注释的内容 */
/*! 注释的内容 */
/// 注释的内容
//! 注释的内容
int a; /**< 注释的内容 */
int a; /*!< 注释的内容 */
int a; ///< 注释的内容 */
int a; //!< 注释的内容 */
其它注释风格见:http://doxygen.nl/manual/docblocks.html
@brief 简要描述
@details 详细描述
@class 类名 类所在的文件 类所在的文件(可包括路径)
@struct 结构体名 结构体所在的文件 结构体所在的文件(可包括路径)
@param [in] 输入参数名 说明
@param [out] 输出参数名 说明
@return 返回说明
@retval 特定值 特定返回值说明
@exception 异常类型 异常说明
@code
...代码...
@encode
@see 参考其它
@deprecated 过时说明
@bug "bug 说明"
@example 例子文件名
@warning 警告信息
@since 版本
@note 注意事项
@author liuyunbin
@copyright GPL-3.0
其它标记选项见:http://www.doxygen.nl/manual/commands.html
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.