1. 程式人生 > >Linux下開發工具備註

Linux下開發工具備註

編輯器-Vim

都知道vim是Linux下的編輯器之神,當然還有emacs也是特別NB的,個人在Linux下比較常用的也就是Vim了,接下來說說vim的一些配置技巧:

配置常見的程式碼模板

func Setfilehead()
    call append(0, '/***********************************************')
    call append(1, '#      Filename: '.expand("%"))
    call append(2, '#        Author: Tim [email protected]')
    call append
(3, '# Description: ---') call append(4, '# Create: '.strftime("%Y-%m-%d %H:%M:%S")) call append(5, '# Last Modified: '.strftime("%Y-%m-%d %H:%M:%S")) call append(6, '***********************************************/') call append(7, '') call append(8, '#include <stdio.h>'
) call append(9, '#include <stdlib.h>') call append(10, '#include <unistd.h>') call append(11, '#include <sys/types.h>') call append(12, '') call append(13, 'int main(int argc, char *argv[]){') call append(14, '') call append(15, ' return 0;') call append
(16, '}') endfunc "對映F1快捷鍵,生成後跳轉至第14行,然後進入vim的插入模式 map <F1> :call Setfilehead()<CR>:14<CR>o

這樣的話只要新建原始檔的時候按一下F1,程式碼就會自動新增到原始檔中了!

已經配置好的Vim

這裡推薦使用幾個開源專案: 《VimForCpp》 這個目前只適用於CentOS7,其他版本後續才會支援! 《space-vim》這個也是比較好用的一個vim,外掛都是一句程式碼全部搞定!

vim和emacs的比較

  • VIM和emacs是可以高度可定製化的編輯器,特別是emacs算是unix下的第一個“人工智慧生命”,經過定製化以後幾乎可以幹任何事情,VIM在高度定製化以後的編輯速度(當然,前提是你要熟悉它的幾種工作模式,特別是快捷鍵的應用),幾乎是其它編輯器不可匹敵的
  • VIM和emacs屬於神器級別的東西,用的好就是神器,用不習慣它就是垃圾,對於大部分人來說他們都是需要比較長的時間才能上手的東西,而UE這樣的屬於已經給你定製好了,但是沒有過多可定製選項的編輯器,方便上手,但是擴充套件效能就不怎麼樣了

編譯器-gcc

gcc是"GNU Compiler Collection"的縮寫

-I:指定標頭檔案路徑 -On:n=0~3,編譯器優化,n越大優化等級越高 -Wall:提示更多的警告資訊 -D:編譯器時定義巨集,注意-D和巨集之間沒有空格 -g:包含除錯資訊 這樣編譯才能被GDB除錯 -C 告訴前處理器不要丟棄註釋。配合`-E’選項使用。 -M:生成與.c和標頭檔案的依賴關係以用於Makefile,包括系統庫的標頭檔案 -MM:生成與.c和標頭檔案的依賴關係以用於Makefile,不包括系統庫的標頭檔案 -v可以檢視gcc的版本資訊,但是要是在gcc -v 後面加上一個原始檔例如,gcc -v main.c,這樣可以獲得gcc所使用的系統標頭檔案。

GCC編譯C/CPP程式步驟

① 預處理:標頭檔案展開、巨集替換、去註釋

gcc -E -o hello.i hello.c

② 編譯:語法檢查、生成彙編程式碼

gcc -S -o hello.s hello.i

③ 彙編:彙編程式碼------->機器碼

gcc -c -o hello.o hello.s

④ 連結:連結為可執行檔案

gcc -o hello hello.o

readelf命令

readelf命令用來顯示一個或者多個elf格式的目標檔案的資訊,可以通過它的選項來控制顯示哪些資訊。 ELF(Executable and Linking Format)是一個定義了目標檔案內部資訊如何組成和組織的檔案格式。核心會根據這些資訊載入可執行檔案,核心根據這些資訊可以知道從檔案哪裡獲取程式碼,從哪裡獲取初始化資料,在哪裡應該載入共享庫,等資訊。 ELF檔案有下面三種類型: 1.目標檔案 gcc -c test.c 得到的test.o就是目標檔案,目標檔案通過連結可生成可執行檔案。 靜態庫其實也算目標檔案,靜態庫是通過ar命令將目標打包為.a檔案。 如:ar crv libtest.a test.o 2.可執行檔案 gcc -o test test.c 得到的test檔案就是可執行的二進位制檔案。 3.共享庫 gcc test.c -fPIC -shared -o libtest.so 得到的檔案listtest.so就是共享庫。 可以通過readelf來區分上面三種類型的ELF檔案,每種型別檔案的頭部資訊是不一樣的!

實現一個彩色的進度條

注意點:printf()是按行緩衝的、sleep()與usleep()函式的單位、如何列印彩色字型

/*************************************************************************
	> File Name: main.c
	> Author: Tim
	> Mail: [email protected]
	> Created Time: 2018年09月21日 星期五 03時23分51秒
 ************************************************************************/

#include<unistd.h>
#include<stdio.h>

int main(int argc, char *argv[])
{
    char buf[102] = {0};
    int i = 0;
    //注意這裡需要使用轉義字元
    char arr[4] = "/-|\\";
    for(i= 0;i<=100;i++)
    {
        buf[i] = '*';
        if(i<40)
            printf("[\033[0;31m%-100s\033[0;39m] [%d%%][%c]\r", buf,i,arr[i%4]);//進度條顏色修飾
        else if(i>=40 && i< 80)
            printf("[\033[0;33m%-100s\033[0;39m] [%d%%][%c]\r",buf,i,arr[i%4]);
        else
            printf("[\033[0;32m%-100s\033[0;39m] [%d%%][%c]\r",buf,i,arr[i%4]);

        //printf("[%-100s] [%d%%][%c]\r",buf,i,arr[i%4]);

        //printf是按行緩衝的,所以需要重新整理緩衝區
        fflush(stdout);
        //usleep的單位是微秒
        usleep(50000);
    }
    //最後需要換行
    printf("\n");
    return 0;
}

yum與rpm安裝的區別

原始碼安裝

  1. 絕大多數開源軟體都是直接以原碼形式釋出的
  2. 原始碼一般會被打成.tar.gz的歸檔壓縮檔案
  3. 原始碼需要編譯成為二進位制形式之後才能夠執行使用
  4. 原始碼基本編譯流程:
    • configure 檢查編譯環境;
    • make對原始碼進行編譯;
    • make insall 將生成的可執行檔案安裝到當前計算機中

rpm安裝

1.原始碼形式的特點:操作複雜、編譯時間長、極易出現問題、依賴關係複雜 2.為了方便,RPM(redhat package manager) 3.RPM通過將程式碼基於特定平臺系統編譯為可執行檔案,並儲存依賴關係,來簡化開源軟體的安裝管理。針對不同的系統設定不同的包 4.常用命令規範:linuxcast-1.2.0-30.el6.1686.rpm 包名-版本號-適用平臺-32/64-rpm 5.使用rpm –i software.rpm(安裝); rpm -e software.rpm(解除安裝); rpm –U software.rpm(升級形式安裝); rpm –ivh http://www.linuxcast.net/software.rpm(支援通過http\ftp協議形式安裝) -v 顯示詳細資訊;-h顯示進度條

yum安裝

rpm軟體包形式的管理雖然方便,但是需要手工解決軟體包的依賴關係。很多時候安裝一個軟體安裝一個軟體需要安裝1個或者多個其他軟體,手動解決時,很複雜,yum解決這些問題。Yum是rpm的前端程式,主要目的是設計用來自動解決rpm的依賴關係,其特點:

  • 自動解決依賴關係;
  • 可以對rpm進行分組,基於組進行安裝操作;
  • 引入倉庫概念,支援多個倉庫
  • 配置簡單

yum倉庫用來存放所有的現有的.rpm包,當使用yum安裝一個rpm包時,需要依賴關係,會自動在倉庫中查詢依賴軟體並安裝。倉庫可以是本地的,也可以是HTTP、FTP、nfs形式使用的集中地、統一的網路倉庫。 倉庫的配置檔案/etc/yum.repos.d目錄下

  • yum install 安裝;
  • yum remove解除安裝;

未完待續