ITPub博客

首页 > Linux操作系统 > Linux操作系统 > linux新手学习笔记

linux新手学习笔记

原创 Linux操作系统 作者:adrain_001 时间:2012-03-31 10:31:21 0 删除 编辑
另《Linux C编程一站式学习》
学习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
#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程序员。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26690043/viewspace-720016/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2012-02-13

  • 博文量
    113
  • 访问量
    259690