github源码指引:源码布局、编译、运行

打印 上一主题 下一主题

主题 867|帖子 867|积分 2601

低级代码游戏的专栏介绍与文章目录-CSDN博客

        所有源码都在这里:https://github.com/codetoys/ctfc.git
        从前基于CentOS,现在基于Ubuntu,应该可以运行在所有UNIX类操纵体系上(从前同时运行在IBM-AIX、HP-UX、Sun上)。
目录
一、源码布局
二、编译
三、运行


一、源码布局


        .git 大家都知道啊,git的隐藏目录
        etc 设置文件
        lib 天生的库
        platform 编译体系,这套编译体系是历史遗留,但是我觉得挺不错,简单明确,得当自己用
        src 源代码,每个子目录是一组功能
                env 基础功能,主要是日记
                function 独立的类,不须要单独编译
                httpd web服务器
                CodeTemplate 代码模板
                CCTModel_UniversalDB 代码模板的一个应用实例
                shmfc 共享内存基础功能
                bin 天生的可执行步伐,这个目录编译时自动天生
二、编译

        注意,利用FTP上传源码时建议利用自动识别,并把“*.mk”加到文本文件名后缀列表。因为源码内里也会包含图片和文档,以是强制利用二进制或文本都是不明智的。
        编译体系大量利用脚本,PATH必须包含“.”,可用如下指令设置:
  1. export PATH=.:$PATH
复制代码
        建议增长到启动脚本内里去(比如.profile)。
        假如链接时找不到C++依赖的库,要设置LD_LIBRARY_PATH,例如:
  1. export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH
复制代码
        由于操纵体系和版本以及g++安装方式不同,现实库的位置是不确定的。 
        初次编译选择编译类型:
  1. cd ctfc/platform
  2. make -f makefile.mk linux debug
复制代码
        makefile.mk如下:
  1. # Select target platform
  2. linux:
  3.         cp linux.mk platform.mk
  4. arm:
  5.         cp arm.mk platform.mk
  6. arm64:
  7.         cp arm64.mk platform.mk
  8. fast:
  9.         cp fast.mk optimize.mk
  10. debug:
  11.         cp debug.mk optimize.mk
复制代码
        有三种机型:linux arm arm64,后两种是我做交织编译用的。
        fast和debug的区别是是否优化编译。
        设置完机型就可以编译了:
  1. cd ../src
  2. chmod 755 *.sh
  3. makeall.sh
复制代码
        makeall.sh一次性编译所有目录。
        每个目录下都有rebuild.sh(makeall.sh就是调用这个)和run.sh,用于重新编译和运行。
        makeall.sh内容如下:
  1. #################################################################################
  2. #如果出错则退出,参数1为退出码
  3. function OnErrorExit
  4. {
  5.         if [[ $? -ne 0 ]]
  6.         then
  7.                 echo 出错,错误码 $1
  8.                 exit $1
  9.         fi
  10. }
  11. #################################################################################
  12. pwd
  13. rm ../lib/* bin/*
  14. mkdir bin
  15. chmod 755 ../*.sh ../platform/*.sh
  16. #定义目标目录列表 function是最顶级只有头文件的目录,不需要编译
  17. MAKE_DIR_LIST="env httpd CodeTemplate CCTModel_UniversalDB shmfc"
  18. #引入函数文件
  19. . ../platform/_make_dir_list.sh
  20. OnErrorExit $?
  21. #编译目标列表
  22. make_dir_list
  23. OnErrorExit $?
  24. echo ${MAKE_DIR_LIST}
  25. echo 检查结果。。。。。。
  26. date
  27. ls -l ../lib
  28. ls -l bin/
  29. file bin/*
复制代码
         焦点功能是调用_make_dir_list.sh循环每个目录执行rebuild.sh。
        假如一切顺遂,最后会看到如许的内容:
  1. --------编译目录 shmfc 完成
  2. env httpd CodeTemplate CCTModel_UniversalDB shmfc
  3. 检查结果。。。。。。
  4. Thu Aug 22 17:08:01 CST 2024
  5. total 5528
  6. -rw-rw-r-- 1 user user  991628 Aug 22 17:07 libenv.a
  7. -rw-rw-r-- 1 user user 2140108 Aug 22 17:07 libmyhttpd.a
  8. -rw-rw-r-- 1 user user 2521512 Aug 22 17:07 libshmfc.a
  9. total 13148
  10. -rwxrwxr-x 1 user user 1344856 Aug 22 17:07 CCTModel_UniversalDB.exe
  11. -rwxrwxr-x 1 user user  938544 Aug 22 17:07 CodeTemplate.exe
  12. -rwxrwxr-x 1 user user  942024 Aug 22 17:07 myenv.exe
  13. -rwxrwxr-x 1 user user 2550640 Aug 22 17:07 myhttpd.exe
  14. -rwxrwxr-x 1 user user 7676280 Aug 22 17:08 shmfc.exe
  15. bin/CCTModel_UniversalDB.exe: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=6a19f503384186bc4291efbbd750d4577f9557ee, with debug_info, not stripped
  16. bin/CodeTemplate.exe:         ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=0768358c40035e5bef69f7076ac51a2f92d70621, with debug_info, not stripped
  17. bin/myenv.exe:                ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=32bc5388090508919410d90f3697b5265d7c6e01, with debug_info, not stripped
  18. bin/myhttpd.exe:              ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=2a22a892d5c53473328cefe0ba36d7d6dd572268, with debug_info, not stripped
  19. bin/shmfc.exe:                ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=fec8cf7f41432ecf0baa595ff1e8ae6f90a939ae, with debug_info, not stripped
复制代码
        得到三个.a和5个.exe(很多人对.exe感到奇怪,岂非UNIX类操纵体系上可执行文件必须没有后缀名吗?)
三、运行

        在bin目录下执行步伐,大概在每个目录下执行run.sh。
        env目录输出myenv.exe,执行结果如下:
  1. [08-22 17:12:41][应用][信息][env_t.cpp               :  21(main)][  0.00]测试
  2. [08-22 17:12:41][应用][信息][env_t.cpp               :  22(main)][  0.00]测试
  3. [08-22 17:12:41][应用][信息][env_t.cpp               :  23(main)][  0.00]测试
  4. [08-22 17:12:41][应用][信息][env_t.cpp               :  24(main)][  0.00]测试
  5. [08-22 17:12:41][应用][信息][env_t.cpp               :  25(main)][  0.00]测试
  6. [08-22 17:12:41][应用][信息][env_t.cpp               :  26(main)][  0.00]测试
  7. [08-22 17:12:41][应用][信息][env_t.cpp               :  28(main)][  0.00]__cplusplus 201103
  8. [08-22 17:12:41][应用][信息][CommandSet.h            : 236(doCommandSet)][  0.00]
  9. 命令表
  10. 命令 组 名称 命令 说明
  11. ---- -- ---- ---- ----
  12. ---- -- ---- ---- ----
  13. 请选择命令:(--group选择命令组 b=break)(q=exit default=201):
复制代码
        没什么现实功能,不外证明步伐能跑了。
        别的目录专门介绍。

(这里是文档竣事)

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

没腿的鸟

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表