Commit 83a19071 by ZhongJianfu

更新

parent 46f96902
Build Build
/Debug/* /Debug/*
*.log *.log
/release/* /release/*
\ No newline at end of file
## helloworld ## helloworld
当前工程git clong : 当前工程git clong :
``` ```
``` ```
**简单说明** **简单说明**
``` ```
一个基本的基于shell脚本与README实现的在linux下运行的helloworld工程C语言工程 一个基本的基于shell脚本与README实现的在linux下运行的helloworld工程C语言工程
``` ```
## 使用说明 ## 工程结构说明
### README OPC UA + MQTT 的通用数据采集框架研究
#### 顶层脚本文件 ### 1、文件说明
##### 使用方法 a) build_project.sh 整体构建脚本,用法如下
```Shell i. ./build_project.sh //默认编译
清空Build目录下的编译文件
sh build_hello_test.sh clean ii. ./build_project.sh clean // 清除工程
在Build目录下生成编译文件
sh build_hello_test.sh iii. ./build_project.sh build Debug //编译(增量/全量自动 暂时没有)
最终生成的目标文件都放在Build/bin目录下
``` b) cleartmp.py 清除所有Build目录下的内容
##### 使用注意事项 c) CMakeLists.txt 构建可执行应用的cmake文件
![1598182508009](README.assets/1598182508009.png) d) env_linux_arm.sh 用于设置交叉编译环境
![1598182520103](README.assets/1598182520103.png) e) env_linux.sh 用于设置本地编译环境
如果构建新的README工程,需要注意这几处的路径。 g) git_push.sh 用于上传代码到gitlab的远程厂库
##### 脚本源码 ### 2、目录说明
```Shell - ​ doc: 存放开发文档,包括研究,特性,学习记录等,可供大家学习
#!/bin/bash
echo "=======================Bulid HELLOWORD Test=================" - ​ zjf:存放建福的个人的测试工程
#检查当前目录下是否有生成用于存放编译文件的Bulid文件夹,如果已经有了就跳过 - ​ xxx:其他开发人员也在当前目录下传教自己的名字缩写的目录,然后上传自己的测试工程
check_build_dir=`ls -l |grep "Build"`
echo $check_build_dir ### 3、使用说明
if [[ $check_build_dir =~ "Build" ]]
then 通过系统环境变量来设置CMake中使用的一些变量,例如工程中的:
echo "Has Bulid Directroy!"
else a) env_linux.sh 本机编译使用,用法如下:
echo "Create Build Directory!"
mkdir Build ```
fi source env_linux.sh
#检查hello目录下是否有Build文件夹,如果没有则生成一个 ```
check_liblorastack_dir=`ls -l ./hello/ |grep "Build"`
echo $check_liblorastack_dir b) env_linux_arm.sh 交叉编译使用
if [[ $check_liblorastack_dir =~ "Build" ]]
then ```
echo "Has lorastack build Directory" source env_linux_arm.sh
else ```
echo "Create lorastack Build Directory"
mkdir ./hello/Build **##特别注意##**
fi
#把输入的参数打印出来 脚本的参数是在脚本名后用空格区分的 sh build_hello_test.sh 1 Debug ```
echo "$1" 切换嵌入式环境变量后,需要执行./build_xdatacollecter.sh clean 再编译。每次都要编译前都要
echo "$2" 造成问题的原因还不知道。目前按照这个方式就可以正常的进行交叉编译
echo "$3" ```
#在./hello/Build执行README这样就回把全部编译的文件都放到了该目录下
cd ./hello/Build 打开相关的文件即可了解环境变量的设置
README -D README_BUILD_TYPE=$2 ..
if [[ "$1" =~ "clean" ]] 交叉编译中有个很重要的参数 --sysroot 指定的库路径,基本就是glibc
then
make clean-all 我的虚拟机是这个路径,交叉编译的一些第三方的库全部都放到这目录下.
else
echo "====================================....Build helloword start....=====================================" ```
make /opt/fsl-imx-x11/4.1.15-2.1.0/sysroots/cortexa7hf-neon-poky-linux-gnueabi/usr/lib
echo "====================================....Build helloword end....=======================================" ```
fi
#README顶层READMELists的文件 首先配置环境变量
cd ~/zjf_lib_study/arm-test3/Build/
README -D README_BUILD_TYPE=$2 .. ```
if [[ "$1" =~ "clean" ]] source env_linux.sh
then ```
make clean-all
#rm -rf ./* 执行编译
#clear swp
#cd ~/linux-test3/ ```
#范工这里还有一些额外操作目前我用不到 编译并且正常运行
#clear html ./build_project.sh
#check_dox_html=`ls -l ./doc/ |grep "html"` 运行脚本 参数1
#echo $check_dox_html ```
#if [[ $check_dox_html =~ "html" ]]
#then ```
# rm -rf ./doc/html 清除所有编译文件
else ./build_project.sh clean
#fi 运行脚本 参数1
```
#python version
#python -V
#rtn="$?"
#if [[ $rtn == "0" ]] ## 文件说明
#then
# echo "python" #### 脚本文件
# python cleartmp.py
#else ##### 使用方法
# echo "python3"
# python3 cleartmp.py ```Shell
#fi 清空Build目录下的编译文件
sh build_hello_test.sh clean
#echo $check_python_ver 在Build目录下生成编译文件
echo "====================================....clean Success....=========================================" sh build_hello_test.sh
else 最终生成的目标文件都放在Build/bin目录下
echo "====================================....Build start....===============================================" ```
make
echo "generate stacktest at ./Build/bin/" ##### 使用注意事项
echo "====================================....Build Success....========================================="
fi ![1598182508009](README.assets/1598182508009.png)
echo "press anykey to exit" ![1598182520103](README.assets/1598182520103.png)
read input
如果构建新的README工程,需要注意这几处的路径。
``` ##### 脚本源码
```Shell
#!/bin/bash
#### 顶层READMELists文件说明 echo "=======================Bulid HELLOWORD Test================="
#检查当前目录下是否有生成用于存放编译文件的Bulid文件夹,如果已经有了就跳过
##### 使用注意事项 check_build_dir=`ls -l |grep "Build"`
echo $check_build_dir
配置源码文件路径 if [[ $check_build_dir =~ "Build" ]]
then
![1598183889283](README.assets/1598183889283.png) echo "Has Bulid Directroy!"
else
配置编译链 echo "Create Build Directory!"
mkdir Build
![1598182945506](README.assets/1598182945506.png) fi
#检查hello目录下是否有Build文件夹,如果没有则生成一个
配置链接库(动态和静态) check_liblorastack_dir=`ls -l ./hello/ |grep "Build"`
echo $check_liblorastack_dir
![1598184171936](README.assets/1598184171936.png) if [[ $check_liblorastack_dir =~ "Build" ]]
then
最终可执行文件 echo "Has lorastack build Directory"
else
![1598184208063](README.assets/1598184208063.png) echo "Create lorastack Build Directory"
mkdir ./hello/Build
##### READMEList文件源码 fi
#把输入的参数打印出来 脚本的参数是在脚本名后用空格区分的 sh build_hello_test.sh 1 Debug
```cmake echo "$1"
#README version 说明README的版本 echo "$2"
README_minimum_required ( VERSION 2.8 ) echo "$3"
#最终生成可执行文件的名字 #在./hello/Build执行README这样就回把全部编译的文件都放到了该目录下
project ( project_hello ) cd ./hello/Build
#The name of the operating system for which README is to build. README -D README_BUILD_TYPE=$2 ..
SET(README_SYSTEM_NAME Linux) if [[ "$1" =~ "clean" ]]
then
#设置输出文件的存放位置 README_BINARY_DIR是README语句执行当前路径 这里我们是在脚本中执行的目录是对应的Build文件夹 make clean-all
set ( EXECUTABLE_OUTPUT_PATH ${README_BINARY_DIR}/bin ) else
set ( LIBRARY_OUTPUT_PATH ${README_BINARY_DIR}/bin ) echo "====================================....Build helloword start....====================================="
#这个不太知道 make
set ( README_SHARED_LIBRARY_LINK_C_FLAGS ) echo "====================================....Build helloword end....======================================="
fi
#set include file 头文件路径说明 #README顶层READMELists的文件
include_directories (./hello/inc) cd ~/zjf_lib_study/arm-test3/Build/
README -D README_BUILD_TYPE=$2 ..
if [[ "$1" =~ "clean" ]]
#set source file 源文件路径说明 空即当前目录 DIR_USR_SOURCE是对当前目录取的别名 then
aux_source_directory ( . DIR_USR_SOURCE ) make clean-all
#rm -rf ./*
#set CC AR LD AS #clear swp
#set arm compiler 设定编译的工具链 #cd ~/linux-test3/
set ( README_C_COMPILER "arm-poky-linux-gnueabi-gcc" ) #范工这里还有一些额外操作目前我用不到
#set linux compiler #clear html
#set ( README_C_COMPILER "gcc" ) #check_dox_html=`ls -l ./doc/ |grep "html"`
set ( README_C_AR "gcc-ar" ) #echo $check_dox_html
#if [[ $check_dox_html =~ "html" ]]
#CFLAGS 设定语言 #then
set ( README_C_FLAGS "-g -std=c++11 -pthread" ) # rm -rf ./doc/html
else
#set debug 这里的README_BUILD_TYPE在脚本中有赋值的 #fi
if(README_BUILD_TYPE STREQUAL Debug) #python version
add_definitions ( #python -V
-DPRINT_DEBUG_INFO #rtn="$?"
-DLORA_SOCKET_SIM #if [[ $rtn == "0" ]]
) #then
endif() # echo "python"
# python cleartmp.py
#load extern library 把libhelloword.so变成链接 helloword #else
#添加动态库 # echo "python3"
add_library ( helloword SHARED IMPORTED ) # python3 cleartmp.py
#动态库的路径 #fi
set_property (TARGET helloword PROPERTY IMPORTED_LOCATION ${README_SOURCE_DIR}/hello/Build/lib/libhelloword.so)
#添加静态库 #echo $check_python_ver
#add_library ( helloword STATIC IMPORTED ) echo "====================================....clean Success....========================================="
#静态库的路径 else
#set_property (TARGET helloword PROPERTY IMPORTED_LOCATION ${README_SOURCE_DIR}/hello/Build/lib/libhelloword.a) echo "====================================....Build start....==============================================="
make
echo "generate stacktest at ./Build/bin/"
echo "====================================....Build Success....========================================="
fi
#generate target
add_executable ( ${README_PROJECT_NAME} ${DIR_USR_SOURCE} ) echo "press anykey to exit"
#根据前面生成的链接helloword,导入库到最后编译的文件中 read input
#.so动态库链接方式
target_link_libraries ( ${README_PROJECT_NAME} PRIVATE helloword pthread) ```
#.a静态库链接方式
#target_link_libraries ( ${README_PROJECT_NAME} helloword pthread)
#add custom
#### 顶层READMELists文件说明
add_custom_target ( clean-all COMMAND rm -rf {README_BINARY_DIR}/* )
##### 使用注意事项
```
配置源码文件路径
#### 驱动层面的READMELists文件
![1598183889283](README.assets/1598183889283.png)
##### 使用注意事项
配置编译链
配置源码路径
![1598182945506](README.assets/1598182945506.png)
![1598184963852](README.assets/1598184963852.png)
配置链接库(动态和静态)
配置编译链
![1598184171936](README.assets/1598184171936.png)
![1598182945506](README.assets/1598182945506.png)
最终可执行文件
配置生成那种库(动态或静态)
![1598184208063](README.assets/1598184208063.png)
![1598185040852](README.assets/1598185040852.png)
##### READMEList文件源码
##### READMEList文件源码
```cmake
```cmake #README version 说明README的版本
#set version README_minimum_required ( VERSION 2.8 )
README_minimum_required ( VERSION 2.8 ) #最终生成可执行文件的名字
project ( project_hello )
#project #The name of the operating system for which README is to build.
project ( hellowordlib ) SET(README_SYSTEM_NAME Linux)
#The name of the operating system for which README is to build. #设置输出文件的存放位置 README_BINARY_DIR是README语句执行当前路径 这里我们是在脚本中执行的目录是对应的Build文件夹
SET(README_SYSTEM_NAME Linux) set ( EXECUTABLE_OUTPUT_PATH ${README_BINARY_DIR}/bin )
set ( LIBRARY_OUTPUT_PATH ${README_BINARY_DIR}/bin )
#设置输出文件的存放位置 README_BINARY_DIR是README语句执行当前路径 这里我们是在脚本中执行的目录是对应的Build文件夹 #这个不太知道
set ( EXECUTABLE_OUTPUT_PATH ${README_BINARY_DIR}/bin ) set ( README_SHARED_LIBRARY_LINK_C_FLAGS )
set ( LIBRARY_OUTPUT_PATH ${README_BINARY_DIR}/lib )
#set include file 头文件路径说明
include_directories (./hello/inc)
#set include
include_directories ( ./inc )
#set source file 源文件路径说明 空即当前目录 DIR_USR_SOURCE是对当前目录取的别名
#set source file aux_source_directory ( . DIR_USR_SOURCE )
aux_source_directory ( ./src DIR_HELLOWROD_SRC )
#set CC AR LD AS
#set CC AR #set arm compiler 设定编译的工具链
set (README_C_COMPILER "arm-poky-linux-gnueabi-gcc") set ( README_C_COMPILER "arm-poky-linux-gnueabi-gcc" )
#set linux compiler #set linux compiler
#set ( README_C_COMPILER "gcc" ) #set ( README_C_COMPILER "gcc" )
set (README_C_AR "gcc-ar") set ( README_C_AR "gcc-ar" )
#set cflags //zjf:what? #CFLAGS 设定语言
set (README_C_FLAGS "-g -std=c++11 -pthread") set ( README_C_FLAGS "-g -std=c++11 -pthread" )
if(README_BUILD_TYPE STREQUAL Debug) #set debug 这里的README_BUILD_TYPE在脚本中有赋值的
add_definitions(
-DPRINT_DEBUG_INFO if(README_BUILD_TYPE STREQUAL Debug)
-DLORA_SOCKET_SIM add_definitions (
) -DPRINT_DEBUG_INFO
endif() -DLORA_SOCKET_SIM
)
#generate target 最后生成了libhelloword.a endif()
#creat .so 生成动态库
add_library ( helloword SHARED ${DIR_HELLOWROD_SRC} ) #load extern library 把libhelloword.so变成链接 helloword
#creat .a 生成静态库 #添加动态库
#add_library ( helloword ${DIR_HELLOWROD_SRC} ) add_library ( helloword SHARED IMPORTED )
#动态库的路径
#add custom set_property (TARGET helloword PROPERTY IMPORTED_LOCATION ${README_SOURCE_DIR}/hello/Build/lib/libhelloword.so)
add_custom_target ( clean-all COMMAND rm -rf ${README_BINARY_DIR}/* ) #添加静态库
#add_library ( helloword STATIC IMPORTED )
``` #静态库的路径
#set_property (TARGET helloword PROPERTY IMPORTED_LOCATION ${README_SOURCE_DIR}/hello/Build/lib/libhelloword.a)
### Astyle linux下整理代码格式
##### 使用方法,
```shell #generate target
#执行该脚本,就会将但其目录下,及次级目录下的.C .H文件安装既定的规则整理好格式 add_executable ( ${README_PROJECT_NAME} ${DIR_USR_SOURCE} )
sh astyle.sh #根据前面生成的链接helloword,导入库到最后编译的文件中
a
``` #.so动态库链接方式
target_link_libraries ( ${README_PROJECT_NAME} PRIVATE helloword pthread)
##### astyle.sh #.a静态库链接方式
#target_link_libraries ( ${README_PROJECT_NAME} helloword pthread)
```shell #add custom
#!/bin/bash
for f in $(find . -name '*.c' -or -name '*.cpp' -or -name '*.h' -type f) add_custom_target ( clean-all COMMAND rm -rf {README_BINARY_DIR}/* )
do
astyle --style=ansi -s4 -S -p -D -m0 -M40 --convert-tabs --suffix=.pre $f ```
done
#### 驱动层面的READMELists文件
# after formate the code,we need to rm '*.orig' files
for f in $(find . -name '*.orig' -type f) ##### 使用注意事项
do
rm $f 配置源码路径
done
![1598184963852](README.assets/1598184963852.png)
```
配置编译链
##### 安装教程
![1598182945506](README.assets/1598182945506.png)
配置生成那种库(动态或静态)
![1598185040852](README.assets/1598185040852.png)
##### READMEList文件源码
```cmake
#set version
README_minimum_required ( VERSION 2.8 )
#project
project ( hellowordlib )
#The name of the operating system for which README is to build.
SET(README_SYSTEM_NAME Linux)
#设置输出文件的存放位置 README_BINARY_DIR是README语句执行当前路径 这里我们是在脚本中执行的目录是对应的Build文件夹
set ( EXECUTABLE_OUTPUT_PATH ${README_BINARY_DIR}/bin )
set ( LIBRARY_OUTPUT_PATH ${README_BINARY_DIR}/lib )
#set include
include_directories ( ./inc )
#set source file
aux_source_directory ( ./src DIR_HELLOWROD_SRC )
#set CC AR
set (README_C_COMPILER "arm-poky-linux-gnueabi-gcc")
#set linux compiler
#set ( README_C_COMPILER "gcc" )
set (README_C_AR "gcc-ar")
#set cflags //zjf:what?
set (README_C_FLAGS "-g -std=c++11 -pthread")
if(README_BUILD_TYPE STREQUAL Debug)
add_definitions(
-DPRINT_DEBUG_INFO
-DLORA_SOCKET_SIM
)
endif()
#generate target 最后生成了libhelloword.a
#creat .so 生成动态库
add_library ( helloword SHARED ${DIR_HELLOWROD_SRC} )
#creat .a 生成静态库
#add_library ( helloword ${DIR_HELLOWROD_SRC} )
#add custom
add_custom_target ( clean-all COMMAND rm -rf ${README_BINARY_DIR}/* )
```
### Astyle linux下整理代码格式
##### 使用方法,
```shell
#执行该脚本,就会将但其目录下,及次级目录下的.C .H文件安装既定的规则整理好格式
sh astyle.sh
a
```
##### astyle.sh
```shell
#!/bin/bash
for f in $(find . -name '*.c' -or -name '*.cpp' -or -name '*.h' -type f)
do
astyle --style=ansi -s4 -S -p -D -m0 -M40 --convert-tabs --suffix=.pre $f
done
# after formate the code,we need to rm '*.orig' files
for f in $(find . -name '*.orig' -type f)
do
rm $f
done
```
##### 安装教程
https://blog.csdn.net/shawhe/article/details/13770643 https://blog.csdn.net/shawhe/article/details/13770643
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment