06mkfile-02singledir

C语言函数模块化示例
本文介绍了一个简单的C语言程序示例,该程序通过模块化的函数组织代码,包括两个独立的功能函数和一个主函数。每个函数都使用__FUNCTION__宏来自我标识,并通过Makefile进行编译和链接。

func_a.c

#include <stdio.h>
#include "func_a.h"

void func_a()
{
    printf("%s\n", __FUNCTION__);
}


func_b.c

#include <stdio.h>
#include "func_b.h"

void func_b()
{
    printf("%s\n", __FUNCTION__);
}
~                                 


include/func_a.h

void func_a();


include/func_b.h

void func_b();


main.c

#include <stdio.h>
#include "func_a.h"
#include "func_b.h"

int main()
{
    func_a();
    func_b();

    return 0;
}
~                       


Makefile

TGT := hello
SRCS := func_a.c func_b.c main.c
DEP := dep

CFLAGS := -O2 -I./include
LDFLAGS :=

$(TGT): $(SRCS:.c=.o)
    $(CC) $(LDFLAGS) -o $@ $^

#$(SRCS:.c=.o):
#        $(CC) $(CFLAGS) -c $<

func_a.o: func_a.c include/func_a.h
    $(CC) $(CFLAGS) -c $<
func_b.o: func_b.c include/func_b.h
    $(CC) $(CFLAGS) -c $<
main.o: main.c include/func_a.h include/func_b.h
    $(CC) $(CFLAGS) -c $<
    

#$(DEP): $(SRCS)
$(DEP): $(SRCS) include/func_a.h include/func_b.h
    $(CC) $(CFLAGS) -MM $(SRCS) >$@
    @sed -i "s/: / $(@): /g" $@

#func_a.o: func_a.c include/func_a.h
#func_b.o: func_b.c include/func_b.h
#main.o: main.c include/func_a.h include/func_b.h
#dep: main.c func_a.c func_b.c include/func_a.h include/func_b.h

sinclude $(DEP)


 

#%.o: %.c
#        $(CC) -c $<

#func_a.o: func_a.c func_a.h
#        $(CC) -c $<
#func_b.o: func_b.c func_b.h
#        $(CC) -c $<
#main.o: main.c func_a.h func_b.h
#        $(CC) -c $<


clean:
    $(RM) $(SRCS:.c=.o) $(TGT) $(DEP)


 

#Jenkinswork mkdir -p jenkinstemp mkdir -p objtemp mkdir -p repo_info #ソースコードclone_control mkdir -p GIT cd GIT git init git remote add origin https://${USERID}:${USERPASS}@$ git fetch --depth 1 origin ParseError: KaTeX parse error: Expected 'EOF', got '#' at position 47: …FETCH_HEAD #̲制御コード情報吐き出し始め …{GITPATH} > WORKSPACE/repoinfo/repositoryinfo.txtechoBranchorTag:WORKSPACE/repoi​nfo/repositoryi​nfo.txtechoBranchorTag:{GITPATH_TAG} >> WORKSPACE/repoinfo/repositoryinfo.txtecho−nHASH:>>WORKSPACE/repoi​nfo/repositoryi​nfo.txtecho−nHASH:>>{WORKSPACE}/repo_info/repository_info.txt git rev-parse FETCH_HEAD >> WORKSPACE/repoinfo/repositoryinfo.txtecho>>WORKSPACE/repoi​nfo/repositoryi​nfo.txtecho>>{WORKSPACE}/repo_info/repository_info.txt #制御コード情報吐き出し終わり cd $ #ソースコードclone_graphics mkdir -p GIT_GRA cd GIT_GRA git init git remote add origin https://${USERID}:${USERPASS}@$ git fetch --depth 1 origin ParseError: KaTeX parse error: Expected 'EOF', got '#' at position 51: …FETCH_HEAD #̲意匠コード情報吐き出し始め …{GITPATH_GRAPHICS} >> WORKSPACE/repoinfo/repositoryinfo.txtechoBranchorTag:WORKSPACE/repoi​nfo/repositoryi​nfo.txtechoBranchorTag:{GITPATH_GFX_TAG} >> WORKSPACE/repoinfo/repositoryinfo.txtecho−nHASH:>>WORKSPACE/repoi​nfo/repositoryi​nfo.txtecho−nHASH:>>{WORKSPACE}/repo_info/repository_info.txt git rev-parse FETCH_HEAD >> WORKSPACE/repoinfo/repositoryinfo.txtecho>>WORKSPACE/repoi​nfo/repositoryi​nfo.txtecho>>{WORKSPACE}/repo_info/repository_info.txt #意匠コード情報吐き出し終わり cd $ #repository_info.txtをGITへコピー cp -rp WORKSPACE/repoinfo/repositoryinfo.txtWORKSPACE/repoi​nfo/repositoryi​nfo.txt{WORKSPACE}/GIT #GFXコードをMAINへコピー cd WORKSPACE/GITGRA/mainline/spatraveo/srccp−rpGraphicsWORKSPACE/GITG​RA/mainline/spat​raveo/srccp−rpGraphics{WORKSPACE}/GIT/mainline/spa_traveo/src #.gitを削除 cd ${WORKSPACE}/GIT find . -name .git | xargs rm -rf #.gitkeepを削除 find . -name .gitkeep | xargs rm -rf #Reprog_Hのビルド cd ${WORKSPACE}/GIT/mainline/spa_traveo/src/Reprog_H #cleanするとlogファイルが消えるのでバックアップ cp -rp prj/Amber_BB_fbl/log/unixcmd_diff.cache WORKSPACE/jenkinstemp/unixcmddiff.cachecp−rpprj/AmberBBfbl/log/mcutooldiff.cacheWORKSPACE/jenkinstemp/unixcmdd​iff.cachecp−rpprj/AmberB​Bf​bl/log/mcut​oold​iff.cache{WORKSPACE}/jenkinstemp/mcu_tool_diff.cache #ReprogHのビルド cat << EOS | tee ${LOGFILE}/build.log ################################### BUILD START date ################################### EOS #clean make PRJ=Amber_BB_fbl clean | tee -a ${LOGFILE}/build.log #logファイルにファイルを戻す mkdir -p prj/Amber_BB_fbl/log cp -rp WORKSPACE/jenkinstemp/unixcmddiff.cacheprj/AmberBBfbl/log/unixcmddiff.cachecp−rpWORKSPACE/jenkinstemp/unixcmdd​iff.cacheprj/AmberB​Bf​bl/log/unixcmdd​iff.cachecp−rp{WORKSPACE}/jenkinstemp/mcu_tool_diff.cache prj/Amber_BB_fbl/log/mcu_tool_diff.cache #depend make PRJ=Amber_BB_fbl depend | tee -a ${LOGFILE}/build.log #rebuild make PRJ=Amber_BB_fbl rebuild | tee -a ${LOGFILE}/build.log #build処理 function build_project() { target_project=$1 target_project_sh=$2 powertrain=$3 #lib_bswd_hcan_s6j3200のビルド cd ${WORKSPACE}/GIT/mainline/spa_traveo echo "Can mkfile change to ${MAKE_VARI}_${powertrain}." rm -rf prj/lib_bswd_hcan_s6j3200/lib_bswd_hcan_s6j3200_prj.mk cp -p prj/lib_bswd_hcan_s6j3200/lib_bswd_hcan_s6j3200_prj.mk.${MAKE_VARI}_${powertrain} prj/lib_bswd_hcan_s6j3200/lib_bswd_hcan_s6j3200_prj.mk make -f Makefile_${MAKE_VARI} clean PRJ=lib_bswd_hcan_s6j3200 | tee -a ${LOGFILE}/build.log cp -rp ${WORKSPACE}/jenkinstemp/unixcmd_diff.cache prj/lib_bswd_hcan_s6j3200/log/unixcmd_diff.cache cp -rp ${WORKSPACE}/jenkinstemp/mcu_tool_diff.cache prj/lib_bswd_hcan_s6j3200/log/mcu_tool_diff.cache make -f Makefile_${MAKE_VARI} depend PRJ=lib_bswd_hcan_s6j3200 | tee -a ${LOGFILE}/build.log make -f Makefile_${MAKE_VARI} rebuild PRJ=lib_bswd_hcan_s6j3200 | tee -a ${LOGFILE}/build.log make -f Makefile_${MAKE_VARI} install PRJ=lib_bswd_hcan_s6j3200 | tee -a ${LOGFILE}/build.log #MAINのビルド #対象PRJのsh実行 c:/cygwin/bin/sh.exe ./${target_project_sh}.sh | tee -a ${LOGFILE}/build.log #clean------------------------------------------------------------------------------------------- make -f Makefile_${MAKE_VARI} clean PRJ=${target_project} | tee -a ${LOGFILE}/build.log #clean後にCANRPGフォルダを生成------------------------------------------------------------------- mkdir -p prj/${target_project}/dst/CANRPG #logにcacheファイルを戻す------------------------------------------------------------------------ cp -rp ${WORKSPACE}/jenkinstemp/unixcmd_diff.cache prj/${target_project}/log/unixcmd_diff.cache cp -rp ${WORKSPACE}/jenkinstemp/mcu_tool_diff.cache prj/${target_project}/log/mcu_tool_diff.cache #depend------------------------------------------------------------------------------------------ make -f Makefile_${MAKE_VARI} depend PRJ=${target_project} | tee -a ${LOGFILE}/build.log #rebuild----------------------------------------------------------------------------------------- make -f Makefile_${MAKE_VARI} rebuild PRJ=${target_project} | tee -a ${LOGFILE}/build.log mv ./debug/${MAKE_VARI}/ydc/mvw/reflash_internal_rom.mvw \ ./debug/${MAKE_VARI}/ydc/mvw/${target_project}/reflash_internal_rom.mvw } #BUILD TARGET処理 #JPN #---------------------------------------------------------------------------- if [ “TARGETPRJ"=="TZAAJP"]∣∣["TARGETP​RJ"=="TZAAJ​P"]∣∣["{TARGET_PRJ}” == “TZAA_1” ]; then build_project “TZAA_1” “TZAA-1” “PET” fi if [ “TARGETPRJ"=="TZAAJP"]∣∣["TARGETP​RJ"=="TZAAJ​P"]∣∣["{TARGET_PRJ}” == “TZAA_2” ]; then build_project “TZAA_2” “TZAA-2” “HEV” fi #---------------------------------------------------------------------------- #ASIA #---------------------------------------------------------------------------- if [ “ParseError: KaTeX parse error: Double subscript at position 25: …RJ}" == "TZAA_1_̲ASIA" ]; then …{TARGET_PRJ}” “TZAA-1” “PET” fi if [ “ParseError: KaTeX parse error: Double subscript at position 25: …RJ}" == "TZAA_2_̲ASIA" ]; then …{TARGET_PRJ}” “TZAA-2” “HEV” fi if [ “ParseError: KaTeX parse error: Double subscript at position 25: …RJ}" == "TZAA_3_̲ASIA" ]; then …{TARGET_PRJ}” “TZAA-1” “PET” fi if [ “ParseError: KaTeX parse error: Double subscript at position 25: …RJ}" == "TZAA_4_̲ASIA" ]; then …{TARGET_PRJ}” “TZAA-2” “HEV” fi #---------------------------------------------------------------------------- #CHN #---------------------------------------------------------------------------- if [ “ParseError: KaTeX parse error: Double subscript at position 25: …RJ}" == "TZAA_1_̲CN" ]; then …{TARGET_PRJ}” “TZAA-1” “KH_PET” fi if [ “ParseError: KaTeX parse error: Double subscript at position 25: …RJ}" == "TZAA_2_̲CN" ]; then …{TARGET_PRJ}” “TZAA-2” “HEV” fi #---------------------------------------------------------------------------- #EU #---------------------------------------------------------------------------- if [ “ParseError: KaTeX parse error: Double subscript at position 25: …RJ}" == "TZAA_1_̲EU" ]; then …{TARGET_PRJ}” “TZAA-1” “PET” fi if [ “ParseError: KaTeX parse error: Double subscript at position 25: …RJ}" == "TZAA_2_̲EU" ]; then …{TARGET_PRJ}” “TZAA-2” “HEV” fi #---------------------------------------------------------------------------- cat << EOS | tee -a ${LOGFILE}/build.log ################################### BUILD END date ################################### EOS #オブジェクトのコピー/削除 if [ “${TARGET_PRJ}” == “TZAA_JP” ]; then #PET cd ${WORKSPACE}/GIT/mainline/spa_traveo/prj/ cp -rp TZAA_1/obj ${WORKSPACE}/objtemp if [ "${DELETE_OBJ}" == "true" ]; then rm -rf TZAA_1/obj/* fi cd ${WORKSPACE}/objtemp mv -b obj TZAA_1_obj cd TZAA_1_obj 7za a ../TZAA_1_obj.zip #HEV cd ${WORKSPACE}/GIT/mainline/spa_traveo/prj/ cp -rp TZAA_2/obj ${WORKSPACE}/objtemp if [ "${DELETE_OBJ}" == "true" ]; then rm -rf TZAA_2/obj/* fi cd ${WORKSPACE}/objtemp mv -b obj TZAA_2_obj cd TZAA_2_obj 7za a ../TZAA_2_obj.zip else cd ${WORKSPACE}/GIT/mainline/spa_traveo/prj/ cp -rp ${TARGET_PRJ}/obj ${WORKSPACE}/objtemp if [ "${DELETE_OBJ}" == "true" ]; then rm -rf ${TARGET_PRJ}/obj/* fi cd ${WORKSPACE}/objtemp mv -b obj ${TARGET_PRJ}_obj cd ${TARGET_PRJ}_obj 7za a ../${TARGET_PRJ}_obj.zip fi cd GIT 7za a …%ZIPNAME%.zip baseline mainline readme_1st.html w_sb.bat repository_info.txt 每一行指令详细分析
11-25
本指南详细阐述基于Python编程语言结合OpenCV计算机视觉库构建实时眼部状态分析系统的技术流程。该系统能够准确识别眼部区域,并对眨眼动作与持续闭眼状态进行判别。OpenCV作为功能强大的图像处理工具库,配合Python简洁的语法特性与丰富的第三方模块支持,为开发此类视觉应用提供了理想环境。 在环境配置阶段,除基础Python运行环境外,还需安装OpenCV核心模块与dlib机器学习库。dlib库内置的HOG(方向梯度直方图)特征检测算法在面部特征定位方面表现卓越。 技术实现包含以下关键环节: - 面部区域检测:采用预训练的Haar级联分类器或HOG特征检测器完成初始人脸定位,为后续眼部分析建立基础坐标系 - 眼部精确定位:基于已识别的人脸区域,运用dlib提供的面部特征点预测模型准确标定双眼位置坐标 - 眼睑轮廓分析:通过OpenCV的轮廓提取算法精确勾勒眼睑边缘形态,为状态判别提供几何特征依据 - 眨眼动作识别:通过连续帧序列分析眼睑开合度变化,建立动态阈值模型判断瞬时闭合动作 - 持续闭眼检测:设定更严格的状态持续时间与闭合程度双重标准,准确识别长时间闭眼行为 - 实时处理架构:构建视频流处理管线,通过帧捕获、特征分析、状态判断的循环流程实现实时监控 完整的技术文档应包含模块化代码实现、依赖库安装指引、参数调优指南及常见问题解决方案。示例代码需具备完整的错误处理机制与性能优化建议,涵盖图像预处理、光照补偿等实际应用中的关键技术点。 掌握该技术体系不仅有助于深入理解计算机视觉原理,更为疲劳驾驶预警、医疗监护等实际应用场景提供了可靠的技术基础。后续优化方向可包括多模态特征融合、深度学习模型集成等进阶研究领域。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值