OPENCC Porting 走过几里路

Poritng OPENCC

命令行基础教程

可以先去runoob.com 上面来看一看哈

 

 

命令的基本格式是(中间是空格分割,参数数量可能有限制,请参考man)

       [路径(可有可无)] 命令名称   参数1  参数2  参数3   ………

 

具体而言,这里的命令名称应该叫做可执行文件名称,这之中有些复杂的部分会在下文提及。

 

譬如 

       ls..  这个命令之中 ls就是命令名称,参数1就是 .. 同时我们注意到ls前面并没有路径标示,所以Shell会自动按照一定规则来搜索ls这个命令

 

敲黑板: 不熟悉的命令 可以在Shell中运行下面的语句来查看用法参考

man ####                           ####就是需要查找的命令

 

Shell 一般支持使用【Tab】按键来补全文件名或者可以用来补全某些命令的参数(--interactive)、命令的名称(比如gcc,g++)

两个特殊目录

       .本级目录

       ..上一级目录

 

 

一些重要的命令(为了美观而大写,事实上全部小写

       PWD  查看我在哪个目录里

       CD   进入某个目录

       WHICH   查看某个命令对应哪个可执行文件(在哪个目录)

              WHICH LS      就可以看到类似 /usr/bin/ls的定位结果

       LS    列出某个目录内的子目录和文件列表(请注意,LL = LS -L)

              LS【参数】【文件夹路径】

              参数–L : 用列表呈现

              参数–A : 展示隐藏内容(文件名以小数点开头的文件是默认隐藏的)

       MKDIR  创建目录

              MKDIR[目录名]

       MV  移动文件/更名 (也可以移动文件夹哦)

              MV  [可有可无的参数] 【源位置】【目标位置】

       CP  拷贝文件

              CP【可有可无的参数】  【源文件】 【目标文件】

              如果需要拷贝目录, 则需要使用 –R 参数,为了不出现繁琐的重复的拷贝确认提示,可以使用-F参数

       CAT   查看某个文件 / 在Shell中展示

       MORE  翻页来查看某个文件(CAT的翻页模式?)

       EMACS/ VIM  编辑某个文件

       FIND     列出所有文件和子目录中的文件(LS 的递归版)

              FIND 【目录名称】

       可以配合GREP 使用

              FIND 某个目录 | GREP “文件名包含的关键字”

       GREP  在文件/Shell的结果进行文本查找

              GREP 【参数】 【想查找的正则表达式/文本】

              GREP –RN “某些内容” *      在当前目录(包含子目录)内查找所有文件中的某些内容

       GIT

DU 查看文件大小

       LN创建 LINK  文件链接

              LN【参数】  【源文件】【目标文件】

              参数–S 创建符号链接(依靠路径来找源文件, 否则默认是通过文件实际的扇区号码来找源文件)

       DF查看磁盘信息

       CHMOD更改文件、文件夹的属性

       CHOWN更改所有权

      

 

建立git仓库

(using github / gogs SERVER),

git 使用方法:

克隆(下载项目主目录)

 

查看项目历史

 

查看当前文件状态

 

提交某个文件,COMMIT, 并提交

git add #####  ####是要添加的

Makefile

Makefile 是控制GCC等编译器进行批量编译、依赖解决的工具。

系统包括多个重要功能 :

a. 其中有编译目标Target(库、可执行文件等),

b. 控制编译参数 Compile Option,

c. 管理编译目标包含哪些文件Source File(文件C/CPP文件路径),

d. 程序包含目录(Include Dir),

e. 编译定义(Definition, 等效于 C/C++文件中的#define,只不过是在文件外部,编译器层面进行定义)

Makefile 语法

Makefile的执行逻辑 是 根据Makefile的内容来

核心语法有两种

       .XXXX 小数点开头 | 特殊用法,请参考Make官方文档

       MMMM  直接运行某个命令

       AAA= BBB  变量赋值操作

       Install:  … 定义某个Target目标

       ifeq/ else  …   调用Makefile函数(比如IFeq判断相等,ENDIF 结束判断函数等)

MakeFile 调试

    $(warning),$(info), $(error)

       为了查看MakeFile之中的变量的值、或者MakeFile

       $(warning ####)   -->   ####就是要显示的内容

       例如,在Makefile中添加  $(warning This is a makefile message) 一行

       就可以在运行 make 生成时 输出 类似

~/xc5/build/Makefile:203: This is a makefile message

的内容,

   $(###)

这个符号就是用来引用###这个变量的值

比如 Makefile中想要重复使用某个值,就会用变量来代替

CLUPS = osprey-my -klvm

PS = $(CLUPS)-qqk

执行上面两行之后,PS 的值就会变成osprey -my –klvm –qqk

可以在 $(warning) 中使用$(###) 来输出某个###变量的内容

$(warning$(#####))  来输出#####的内容

     $(files)

这个TOKEN有特殊含义、用途请参考Google

3. CMake 的变量,分层

4.Open64 文件夹结构

       核心目录

       OPEN64

              \configure (BUILD目录生成器,Makefile初始化器)

              \OSPREY   -- 核心的项目代码源文件目录(SOURCE)

                     \####    -- 某个单独的模块

                            \Makefile.gbase 模块的核心Makefile,配合全局Makefile使用

                            \*****.c       模块内部的c源文件

                            \*****.cxx  模块内部的c++源文件

                     \WGEN          --WGEN 模块

                     \IR_TOOLS  -- IR-TOOLS 模块

       BUILD目录 (需要手动mkdir 新建的,用来分离编译结果,

用CONFIGURE 来初始化的)

              \OSPREY   核心代码生成目录

                     \Makefile.gsetup     -- 全局变量 Makefile 的初始化

                     \TARGDIR          核心模块生成目录(20个左右生成目录)

                     \TARGDIR_LIB  基础库生成目录

5. Makefile之间的关系

入口:

在BUILD/Osprey/targdir/某个模块/Makefile 是某个模块的核心Makefile

这个Makefile 操作两件事情

A.       去加载全局变量 (../../Makefile.gsetup)

a)      gsetup 会去加载 host对应的

OPEN64/osprey/linux/make 下面的

                            i.          gcommondef, (全局Definition)

                          ii.          gcommonrules(全局生成RULE)

       B.去实际调用模块的生成Makefile(OPEN64/Osprey/某个模块/Makefile.gbase),来实际运行编译(GCC/LD),生成最终的目标:可执行文件

 

 

 

CMAKE 编译

1.首先CD进入要生成文件的目录,

2. 运行 cmake 【有CMakeLists.txt的文件夹路径】

       譬如,在 opencc-cmake / cmake-build-debug目录中运行

cmake .. (生成全部)

cmake ../irtools/ (只生成IR_TOOLS)

cmake ../libcomutils/ (只生成LIBCOMUTILS)

 

3. make 【可选(Target 名称)】

 

 

 

7. TODO

a. 关注系统API, LIBC / LIBC++(API和标准的差异/STDC++/C++的差异)

       库之中包含的内容

b. MACOS / DARWIN / XNU

c. 区分Chipset ,

d. 区分HOST, TARGET

e. 熟悉单个模块的功能,实现内容

 

 

VCG.cxx

添加宏定义:BUILD_OS_MACOS不使用malloc.h

 

STRTAB.cxx

没有实现(删除了)

 

SYMTAB.cxx

修改: 使用unordered_map替代hash_map,

添加: #include <iostream>


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值