github源码指引:源码结构、编译、运行

初级代码游戏的专栏介绍与文章目录-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必须包含“.”,可用如下指令设置:

export PATH=.:$PATH

        建议增加到启动脚本里面去(比如.profile)。

        如果链接时找不到C++依赖的库,要设置LD_LIBRARY_PATH,例如:

export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH

        由于操作系统和版本以及g++安装方式不同,实际库的位置是不确定的。 

        初次编译选择编译类型:

cd ctfc/platform
make -f makefile.mk linux debug

        makefile.mk如下:

# Select target platform
linux:
	cp linux.mk platform.mk
arm:
	cp arm.mk platform.mk
arm64:
	cp arm64.mk platform.mk

fast:
	cp fast.mk optimize.mk
debug:
	cp debug.mk optimize.mk

        有三种机型:linux arm arm64,后两种是我做交叉编译用的。

        fast和debug的区别是是否优化编译。

        设置完机型就可以编译了:

cd ../src
chmod 755 *.sh
makeall.sh

        makeall.sh一次性编译所有目录。

        每个目录下都有rebuild.sh(makeall.sh就是调用这个)和run.sh,用于重新编译和运行。

        makeall.sh内容如下:



#################################################################################

#如果出错则退出,参数1为退出码
function OnErrorExit
{
	if [[ $? -ne 0 ]]
	then
		echo 出错,错误码 $1
		exit $1
	fi
}

#################################################################################

pwd

rm ../lib/* bin/*
mkdir bin

chmod 755 ../*.sh ../platform/*.sh

#定义目标目录列表 function是最顶级只有头文件的目录,不需要编译
MAKE_DIR_LIST="env httpd CodeTemplate CCTModel_UniversalDB shmfc"

#引入函数文件
. ../platform/_make_dir_list.sh
OnErrorExit $?

#编译目标列表
make_dir_list
OnErrorExit $?

echo ${MAKE_DIR_LIST}
echo 检查结果。。。。。。
date
ls -l ../lib
ls -l bin/

file bin/*

         核心功能是调用_make_dir_list.sh循环每个目录执行rebuild.sh。

        如果一切顺利,最后会看到这样的内容:

--------编译目录 shmfc 完成
env httpd CodeTemplate CCTModel_UniversalDB shmfc
检查结果。。。。。。
Thu Aug 22 17:08:01 CST 2024
total 5528
-rw-rw-r-- 1 user user  991628 Aug 22 17:07 libenv.a
-rw-rw-r-- 1 user user 2140108 Aug 22 17:07 libmyhttpd.a
-rw-rw-r-- 1 user user 2521512 Aug 22 17:07 libshmfc.a
total 13148
-rwxrwxr-x 1 user user 1344856 Aug 22 17:07 CCTModel_UniversalDB.exe
-rwxrwxr-x 1 user user  938544 Aug 22 17:07 CodeTemplate.exe
-rwxrwxr-x 1 user user  942024 Aug 22 17:07 myenv.exe
-rwxrwxr-x 1 user user 2550640 Aug 22 17:07 myhttpd.exe
-rwxrwxr-x 1 user user 7676280 Aug 22 17:08 shmfc.exe
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
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
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
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
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,执行结果如下:

[08-22 17:12:41][应用][信息][env_t.cpp               :  21(main)][  0.00]测试
[08-22 17:12:41][应用][信息][env_t.cpp               :  22(main)][  0.00]测试
[08-22 17:12:41][应用][信息][env_t.cpp               :  23(main)][  0.00]测试
[08-22 17:12:41][应用][信息][env_t.cpp               :  24(main)][  0.00]测试
[08-22 17:12:41][应用][信息][env_t.cpp               :  25(main)][  0.00]测试
[08-22 17:12:41][应用][信息][env_t.cpp               :  26(main)][  0.00]测试
[08-22 17:12:41][应用][信息][env_t.cpp               :  28(main)][  0.00]__cplusplus 201103
[08-22 17:12:41][应用][信息][CommandSet.h            : 236(doCommandSet)][  0.00]
命令表
命令 组 名称 命令 说明
---- -- ---- ---- ----
---- -- ---- ---- ----


请选择命令:(--group选择命令组 b=break)(q=exit default=201):

        没什么实际功能,不过证明程序能跑了。

        其它目录专门介绍。


(这里是文档结束)

  • 24
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值