Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
H
HelloWorld
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ZhongJianfu
HelloWorld
Commits
83a19071
Commit
83a19071
authored
Jul 12, 2021
by
ZhongJianfu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
更新
parent
46f96902
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
399 additions
and
313 deletions
+399
-313
.gitignore
.gitignore
+4
-3
README.md
README.md
+395
-310
No files found.
.gitignore
View file @
83a19071
Build
Build
/Debug/*
/Debug/*
*.log
*.log
/release/*
/release/*
\ No newline at end of file
README.md
View file @
83a19071
## 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
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment