• linux 新手学习笔记


    学习6个月后,笔记如下:

    按照vs形式划分的目录

    |--makefile 项目makefile 
    |--include 目录 共享头文件
    |--out32 生成结果目录
    |--mini 执行文件
    |--applog 日志模块,共享库
    |--memory 内存管理模块,静态库

    使用emacs编辑。

    c文件都很简单,暂不宜一一列举了。

    项目makefile

    #生成目标
    all:myapp

    #编译选项
    CC = gcc
    AR = ar
    CFLAGS = -g -Wall -ansi

    #目标文件夹
    OUTPUT_FOLDER = ./out32/
    DST_FOLDER = ../$(OUTPUT_FOLDER) 

    #头文件路径
    INCLUDE = . /usr/include


    #模块路径
    LOG_FOLER = applog
    MAIN_FOLER = mini
    MEM_FOLDER = memory


    #模块生成目标
    APP_LOG_OBJ = libapplog.so
    MAIN_OBJ = mini
    MEM_OBJ = libmm.a


    #进入不同的模块,执行makefile后,复制结果到目标文件夹
    $(APP_LOG_OBJ):
     (cd $(LOG_FOLER);$(MAKE))
     (cd $(LOG_FOLER);mv -f $(APP_LOG_OBJ)  $(DST_FOLDER)$(APP_LOG_OBJ))

    $(MEM_OBJ):
     (cd $(MEM_FOLDER);$(MAKE))
     (cd $(MEM_FOLDER);mv -f $(MEM_OBJ)  $(DST_FOLDER)$(MEM_OBJ))

    #存在依赖项 
    $(MAIN_OBJ):$(MEM_OBJ)
     (cd $(MAIN_FOLER);$(MAKE))
     (cd $(MAIN_FOLER);mv -f $(MAIN_OBJ) $(DST_FOLDER)$(MAIN_OBJ))

    #目标依赖项
    myapp:$(APP_LOG_OBJ) $(MEM_OBJ)  $(MAIN_OBJ)
     
     
    #清除结果
    clean: 
     (cd $(LOG_FOLER);$(MAKE) clean) 
     (cd $(MAIN_FOLER);$(MAKE) clean)  
     (cd $(MEM_FOLDER);$(MAKE) clean)
     (cd $(OUTPUT_FOLDER);rm $(APP_LOG_OBJ)  $(MAIN_OBJ)  $(MEM_OBJ))

    #applog模块c文件
    #头文件

    #include <stdio.h>
    #include "applog.h"
    #include "applogIf.h"

    #实现...

    makefile
       
    all:libapplog.so

    CC = gcc
    AR = ar

    #头文件路径
    INCLUDE = . /usr/include
    PROJECT_INCLUDE = ../include

    CFLAGS = -g -Wall -ansi

    #makefile用来定位依赖项的目录,makefile保留字
    VPATH = ../include

    applog.o: applog.c applog.h applogIf.h  #没有VPATH的话,applog.h applogIf.h有更新,则不会自动重新编译
     $(CC) -fPIC -I$(INCLUDE) -I$(PROJECT_INCLUDE) $(CFLAGS)  -c applog.c

    libapplog.so:applog.o
     $(CC) -shared -fPIC -Wl,-soname,libapplog.so.1 -o libapplog.so applog.o
     选项: 共享库 平台无关性  
    clean:
     -rm *.o


    #mini makefile

    all:mini

    CC = gcc
    AR = ar

    INCLUDE = . /usr/include
    INCLUDE_LOG = ../applog
    LIB_OUTPUT= ../out32
    INCLUDE_PARENT = ../include


    MEM_OBJ = libmm.a

    VPATH = ../include

    CFLAGS = -g -Wall -ansi


    mini.o: mini.c app.h applogIf.h loadso.h memif.h tcpclientif.h
     $(CC) -I$(INCLUDE) -I$(INCLUDE_PARENT) $(CFLAGS) -lapplog  -Wl,-rpath,./ -c mini.c
    选项: -lapplog 需要共享库libapplog.so
     -Wl,-rpath,./ 共享库定位优先从当前目录查询

    mini: mini.o help.o
     $(CC)  -o mini mini.o help.o -Wl,-rpath,./ -L$(LIB_OUTPUT)   -lmm  -lpthread 

    clean:
     -rm *.o

    #memory makefile

    all:libmm.a

    CC = gcc
    AR = ar

    INCLUDE = . /usr/include

    CFLAGS = -g -Wall -ansi

    VPATH = ../include

    mem.o: mem.c mem.h memif.h
     $(CC) -fPIC  -I$(INCLUDE) $(CFLAGS) -c mem.c

    libmm.a:mem.o
     $(AR) rcs   libmm.a mem.o
    选项:静态库

    clean:
     -rm mem.o libmm.a

       

    完成以上3种形式的文件创建后,下一步正式进入linux的世界了。

    虽然现在我还是windows程序员。

  • 相关阅读:
    Java学习第一篇废话写在前面
    使用UI Automation实现自动化测试7.2 (模拟键盘复杂操作在自动化测试中的应用)
    生活随想之 积累经验篇
    赌一把
    重启职业及生存旅途计划
    partial class在自动化测试中的使用
    您们用什么广告平台
    Crazy English 900 Expressions (Android App)
    生存之道
    个税计算器完美终极版
  • 原文地址:https://www.cnblogs.com/febwave/p/2398753.html
Copyright © 2020-2023  润新知