What is makefile?

Posted in     at 2011-03-07

linux下用make工具编译程序,关键是makefile文件。

make命令有4个可选参数

make [flags] [macro] [definitions] [targets]

flags选项

    -f file 指定file为描述文件
    -s 沉默模式,执行之前不输出相应的命令行信息
    -r 禁止试用build-in规则
    -n 非执行模式,输出所有执行命令,但是不执行
    -t 更新目标文件
    -q make操作将根据目标文件是否已经更新返回0或者非0
    -p 输出所有宏定义和目标文件描述
    -d Debug模式,输出有关文件和检测时间的详细信息
    -c dir 在读取makefile之前改变到指定的目录上
    -h help文档
    -w 在处理makefile之前和之后,都显示工作目录
    …

macro

    1。可以在makefile文件中定义宏
        OBJECTS=filea.o fileb.o   (定义宏)
        $(OBJECTS)        (应用宏)
    2。在命令行中输入宏定义
        make "LIBS=-LL -LS"    命令行中输入宏

targets

    用来指定make命令要编译的目标文件,并且允许同时定义编译多个

make all 编译所有的目标

make clean 清除之前所编译的可执行文件及目的文件

make distclean 除了清除可执行文件和目标文件外,同时把makefile文件也清除掉

make install 将程序安装到系统中

gdb是用来调试c和c++程序的强力调试器

wc 命令用来显示指定文件中 行数,字数 字节数

$ wc -lwc file1 file2

Erlang/OTP(Open Telecom Platform) 是包装在Erlang中的一组程序

三种机制

    行为机制(behaviours)
        gen_server: 创建通用服务器,向多个客户端提供服务 
        gen_fsm:  有限状态机
        gen_event: 创建事件处理器和发报器
    应用行为(Application behavior)
    监测行为(Supervisor behavior)

Erlang Study

Posted in   Erlang   at 2011-03-03

Erlang程序编译运行的方法

方法1:直接在shell中编译运行

1
2
3
4
5
6
hello.erl
    -module(hello).
    -export([start/0]).

    start() ->
        io:format("Hello world~n").
$ erl
>c(hello).
{ok,hello}
>hello:start().
Hello world
ok
>

方法2:在命令行编译运行

$ erlc hello
$ erl -noshell -pa path -s hello start -s init stop

方法3:把方法2的命令写入一个脚本,作为批处理的东西

hello.sh
    #!/bin/sh
    
    erl -noshell -pa path -s hello start -s init stop
$ ./hello.sh

方法4:用makefile来编译,

一个标准的makefile模板

.SUFFIXES: .erl .bem .yrl .erl .beam

erlc -W $<

.yrl .erl

erlc -W $<

ERL=erl -boot start_clean MODS=mod1 mod2 mod3 …

all:compile compile: ${MODS:%=%.beam} subdirs special1.beam: special1.erl

${ERL} -Dflag | -w0 special1.erl

application1: compile

${ERL} -pa Dir1 -s application1 start Arg1 Arg2

subdirs:

cd dir1; moke
cd dir2: make

clean:

rm -rf *.beam erl_crash.dump
cd dir1; make clean
cd dir2; make clean

Erlang Linux

Posted in   Erlang   at 2011-03-01

linux查看进程的命令

ps aux

a -- 显示系统中所有用户的进程

u -- 输出进程的用户所属信息

x -- 显示没有控制台的进程

查找服务名为erlang的进程

ps aux | grec erlang

linux查看系统监听的服务

`netstat -lna`

l -- 当前系统监听的端口信息

n -- 端口按照端口号来显示

a -- 所有的服务

erl 命令参数介绍

*boot

指定启动文件,默认值: $ROOT/bin/start.boot *s Mod Func Arg1,Arg2

init调用的方法,

*setcookie Cookie

设置cookie

*name Name

让erlang运行时系统运行在Name结点上, Name的形式 Name@Host

*config Config

明确configuration文件

*noshell

不用对话界面

*pa path

path为绝对路径,指导程序的启动路径

`erl -noshell -s hello start -s init stop`

erlang应用程序

有一个application callback module,应用程序的启动和终止的方法。app_name.erl

应用程序的描述文件 application resource file,记录应用程序的基本信息,app_name.app文件

其内容如下: {application,app_name,

[{description,"Just Sample"},
{vsn,"0.01"},
{modules,[]},
{registered,[]},
{mod,{app_name,[]}},
{env,[]},
{applications,[kernel,stdlib,crypto]}
]

}

modules -- 应用程序执行完start后,要运行的start的module列表

mod -- 应用程序的入口,这个module的start stop脚本

applications -- 应用程序运行之前,必须启动或运行的应用

application master进程是应用程序的主进程,控制着应用程序的执行