./build.sh(cmake)-》解析CMakelists生成makefile-》./build.sh(make)-》makefile和代码编程成可执行文件(gtestcase)
.clang-format: //代码格式
#基础样式
BasedOnStyle: Google
#指针的*的挨着哪边
PointerAlignment: Right
#访问修饰符前的空格
AccessModifierOffset: -2
# 缩进宽度
IndentWidth: 2
# 连续的空行保留几行
MaxEmptyLinesToKeep: 1
# 圆括号的换行方式
BreakBeforeBraces: Attach
# 是否允许短方法单行
AllowShortFunctionsOnASingleLine: false
# 支持一行的if
AllowShortIfStatementsOnASingleLine: true
# 在未封闭(括号的开始和结束不在同一行)的括号中的代码是否对齐
AlignAfterOpenBracket: true
# switch的case缩进
IndentCaseLabels: true
# 针对OC的block的缩进宽度
ObjCBlockIndentWidth: 2
# 针对OC,属性名后加空格
ObjCSpaceAfterProperty: true
# 每行字符的长度
ColumnLimit: 240
# 注释对齐
AlignTrailingComments: true
# 括号后加空格
SpaceAfterCStyleCast: false
# 换行的时候对齐操作符
AlignOperands: true
# 中括号两边空格 []
SpacesInSquareBrackets: false
# 多行声明语句按照=对齐
AlignConsecutiveDeclarations: false
# 容器类的空格 例如 OC的字典
SpacesInContainerLiterals: false
# 在构造函数初始化时按逗号断行,并以冒号对齐
BreakConstructorInitializersBeforeComma: true
# 函数参数换行
AllowAllParametersOfDeclarationOnNextLine: true
#在续行(# 下一行)时的缩进长度
ContinuationIndentWidth: 4
# tab键盘的宽度
TabWidth: 2
# 赋值运算符前加空格
SpaceBeforeAssignmentOperators: true
# 行尾的注释前加1个空格
SpacesBeforeTrailingComments: 1
# 函数返回类型换行时,缩进函数声明或函数定义的函数名
IndentWrappedFunctionNames: true
.gitignore //git上传忽略文件
!*.*
!*/
BUILD
Makefile
*Dockerfile
AUTHORS
LICENSE
README
WORKSPACE
tags
.vscode/
3rdparty/or-tools/examples
build
.history/
#*.json
*.dot
#*.dat
*.orig
*.tar
*.tar.gz
tests/sparse_matrix/sparse_matrix
*.restored
*.o
*.cmake
*.frames.txt
*.low_bytes.txt
*.high_bytes.txt
*output_file/*.txt
*models/CMakeFiles
*models/*.cmake
*output_file/*.txt
*examples/output_cnn/map/*.txt
*models/CMakeCache.txt
*models/install_manifest.txt
*models/libwitin.so
./build/
output_file/
dump/
include/mpu/ver.h
last_dump/
toolchain/fuse/0711
toolchain/atw_warp
.idea/
cmake-build-debug/
killDbg.sh
script/xxx_mpu_config.ini
mpu_log.ans
CMakeLists.txt://生成makefile,控制编译规则
cmake_minimum_required(VERSION 3.16)
指定项目名称和构建过程中相关工具及其版本号
set(CMAKE_C_COMPILER "/usr/bin/gcc")
用 gcc 编译器来编译 C 语言源代码。
set(CMAKE_CXX_COMPILER "/usr/bin/g++")
用 g++ 编译器来编译 C++ 语言源代码。
project (xxx_sim)
定义项目名称
add_definitions("-g")
向编译器添加指定的编译选项。在这里,-g
是一个编译选项,表示在编译过程中生成调试信息以便进行调试。
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Werror=unused-variable -Werror=unused-but-set-variable ")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer")
-fsanitize=address 是用来开启地址(memory)工具的,用于检测内存访问错误。
-fno-omit-frame-pointer 则是为了在生成的可执行文件中保留 frame pointer (框架指针),以便在堆栈跟踪时能够更准确地定位调用栈中的函数
file(GLOB INCLUDE_DIR "inc/")
将 “inc/” 目录下的头文件所在的路径添加到编译器的头文件搜索路径中,以便在编译项目时能够正确地找到并包含这些头文件。
include_directories(inc)
include_directories(${INCLUDE_DIR})
命令用于向项目中添加包含目录,告诉编译器在哪些位置查找头文件
file(GLOB TEST_SRCS "test/*.cpp")
将test目录下的所有 .cpp 文件匹配到TEST_SRCS中
file(GLOB SOURCES src/api/*.cpp src/base/*.cpp src/xxx/*.cpp)
将src目录下的所有 .cpp 文件匹配到SOURCES中。
macro(simulator_add_test name)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY .)
add_executable(${name} ${TEST_SRCS} ${SOURCES})
target_include_directories(${name} PRIVATE ${INCLUDE_DIR})
target_link_libraries(${name} PRIVATE gtest_main)
target_link_libraries(${name} PRIVATE gtest)
target_link_libraries(${name} PRIVATE pthread)
endmacro()
定义了一个名为 simulator_add_test
的宏(macro),用于简化在 CMakeLists.txt 文件中添加测试可执行文件的过程。
add_compile_options(-std=c++14)
告诉编译器使用C++14标准来编译代码
link_libraries(pthread)
用于链接 pthread
库,以支持多线程操作。
add_library(xx02_sim SHARED ${SOURCES_CPP} ${SOURCES_C})
创建一个名为 xx02_sim
的共享库(shared library),该库包含 ${SOURCES_CPP}
和 ${SOURCES_C}
中的源文件
target_link_libraries(xx02_exec /lib/x86_64-linux-gnu/libm-2.27.so)
将 /lib/x86_64-linux-gnu/libm-2.27.so
这个库链接到 xx02_exec
共享库。
simulator_add_test(gtestcases)
使用之前定义的宏 simulator_add_test
创建一个名为 gtestcases
的测试可执行文件。
build.sh://编译脚本
if [ "$1" != "" ]; then
if [ -d ./build ]; then
rm -rf ./build
fi
fi
if [ ! -d ./build ]; then
mkdir ./build
fi
cd build
cmake ..
make -j8
cd ..
gtestcash.sh//可执行文件
rm ./dump/* -rf
./build/gtestcases