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程序员。

原文地址:https://www.cnblogs.com/febwave/p/2398753.html