上一篇文章我们已经完成了 libhello
动态库的构建以及安装,本节我们的任务很简单: 编写一个程序使用我们上一节构建的共享库。
请在/backup/cmake
目录建立 t4
目录,本节所有资源将存储在 t4
目录。
本文章的任务:
1,建立一个静态库和动态库,提供 HelloFunc
函数供其他程序编程使用,HelloFunc
向终端输出Hello World
字符串。
2,安装头文件与共享库。
没有最好,只有更好
从本篇文章开始,后面所有的构建我们都将采用 out-of-source
外部构建,约定的构建目 录是工程目录下的 build
自录。
本小节的任务是让前面的Hello World
更像一个工程,我们需要作的是:
src
,用来放置工程源代码;doc
,用来放置这个工程的文档 hello.txt
COPYRIGHT
, README
;runhello.sh
脚本,用来调用 hello
二进制bin
子目录;hello
二进制与 runhello.sh
安装至/usr/bin
,
将 doc
目录 的内容以及 COPYRIGHT/README
安装到/usr/share/doc/cmake/t2
根据一个最简单的例子 Helloworld
来演练一下cmake的完整构建过程,但是并不
会深入的探讨 cmake
,仅仅展示一个简单的例子,并加以粗略的解释。
cmake版本:cmake version 3.12.1
;
协同修改
多人并行不悖的修改服务器上的同一文件。
数据备份
不仅保存目录和文件的当前状态,还能够保存每一个提交过的历史状态。
版本管理
在保存每一个版本的文件信息的时候要做到不保存重复数据,以节约存储空间,
提高运行效率。这方面SVN采用的是增量管理的方式,每次增量保存,如果需要这整改文件
就会把每次增量保存的和最开始的文件进行拼凑起来,呈现出来的就是最新的文件,
而Git采取了文件系统快照的方式。
维护远程代码库
本地代码库和远程代码托管中心协作
注意:.git目录中存放的是本地库香港的子目录和文件,不要删除,也不要胡乱修改。
创建并准备好git库,添加好文件:
root@mac /mac/test
$ git init testMV
Initialized empty Git repository in /mac/test//testMV/.git/
root@mac /mac/test
$ cd testMV/
root@mac /mac/test/testMV (master)
$ ls
root@mac /mac/test/testMV (master)
$ touch test.cpp
root@mac /mac/test/testMV (master)
$ git status
On branch master
Initial commit
Untracked files:
(use "git add <file>..." to include in what will be committed)
test.cpp
nothing added to commit but untracked files present (use "git add" to track)
root@mac /mac/test/testMV (master)
$ git add .
root@mac /mac/test/testMV (master)
$ git commit -m "add test"
[master (root-commit) 7d083a0] add test
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 test.cpp
root@mac /mac/test/testMV (master)
执行git mv流程: 1.创建一个和之前文件内容一样的文件,文件名为新的文件名 2.将原来的文件删除 3.将删除的文件添加到暂存区 4.将新建的文件添加到暂存区
root@mac /mac/test/testMV (master)
$ git mv test.cpp test2.cpp
root@mac /mac/test/testMV (master)
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: test.cpp -> test2.cpp
root@mac /mac/test/testMV (master)
如果要保存修改直接commit就可以了;
root@mac /mac/test/testMV (master)
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: test.cpp -> test2.cpp
root@mac /mac/test/testMV (master)
$ git commit -m "git mv test.cpp->test2.cpp"
[master 4dfdd04] git mv test.cpp->test2.cpp
1 file changed, 0 insertions(+), 0 deletions(-)
rename test.cpp => test2.cpp (100%)
l00
root@mac /mac/test/testMV ((4dfdd04...))
$ mv test2.cpp test3.cpp
root@mac /mac/test/testMV ((4dfdd04...))
$ git status
HEAD detached at 4dfdd04
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
deleted: test2.cpp
Untracked files:
(use "git add <file>..." to include in what will be committed)
test3.cpp
no changes added to commit (use "git add" and/or "git commit -a")
以上行为只是重新命名了一下文件名;