通过2个帖子来学习
//首先建立一个 fun.mpc(假设你的工程名叫fun)的文件
内容为:
// -*- MPC -*-
// $Id: bin.mpc 80826 2010-06-20 14:51:23Z wotte $
project(fun): aceexe {
exename = fun
libpaths += "/usr/local/ACE/lib/"
Source_Files{
fun.cpp
}
}
然后执行命令:$ACE_ROOT/bin/mpc.pl -type make *mpc 会产生一个名为:Makefile.fun的文件
到这里已经完成一大半了。
把$ACE_ROOT/bin/GNUmakefile拷贝到当前目录下。
修改内容为
MAKEFILE = Makefile
ifeq ($(findstring k,$(MAKEFLAGS)),k)
KEEP_GOING = -
endif
include $(ACE_ROOT)/include/makeinclude/macros.GNU
all: fun
REMAINING_TARGETS := $(filter-out all,$(TARGETS_NESTED:.nested=)) $(CUSTO_TARGETS)
$(REMAINING_TARGETS):
$(KEEP_GOING)@$(MAKE) -f Makefile.fun $(@)
.PHONY: fun
fun:
$(KEEP_GOING)@$(MAKE) -f Makefile.fun all
project_name_list:
@echo fun
其实就是把里面的makefile.fun、fun更新到里面。
完成了,执行make就可以了。
// //
对于一个精通makfile的编程老鸟来说,写一个makefile,添加ACE头文件目录和库文件目录是相当容易的事情。但是对于笔者这样的懒人,平时做项目都是直接拷贝的别的项目的makfile,也懒得去研究makefile的细节.(哈哈,忽然有些怀念VC这样的IDE)。ACE给我们做了很多事,同样也考虑到了懒人们,懒人们可以使用ACE安装包里自带的perl脚本来自动生成makefile,当然,你必须做的是定义一个mpc文件,然后用这个perl脚本来执行这个mpc文件。
怎样定义一个mpc文件呢, 在$ACE_ROOT/tests目录下有一个tests.mpc,这是一个很好的参考例子,$ACE_ROOT/tests下的所有例程的makfile都是根据这个tests.mpc文件来生成的,把tests.mpc打开来研究一下,自己也能轻易的定义这种格式的文件了。这里举两个简单的例子,使用关键字exename来定义编译产生应用程序的makefile, 使用sharedname来定义编译产生库文件的makefile。
先让我们来看一个典型的mpc文件
//project_name 工程的名称,可缺省
// baseproject mpc的模板,
//一般使用aceexe或者acelib模板,也可以自己定义模板
project(project_name) : baseproject,anotherbaseproject{
exename = foo //产生的可执行程序的名称
includes += "." //工程需要包括的头文件目录
libpaths = directory //工程需要包括的库文件目录
Source_Files { //工程的源文件
file1.cpp
file2.cpp
.
.
fileN.cpp
}
Header_Files { //工程的头文件
file1.h
file2.h
.
.
fileN.h
}
}
例1,编译应用程序
新建一个cpp文件hello_world.cpp;
#include “ace/Log_Msg.h”
int main(int argc, char*argv[])
{
ACE_DEBUG((LM_DEBUG, “hello world!/n”));
Return 0;
}
新建一个mpc文件hello_world.mpc;
project(Hello_World) : aceexe {
exename = hello
Source_Files {
Hello_world.cpp
}
}
执行命令: $ACE_ROOT/bin/mpc.pl -type make hello_world.mpc;
产生一个后缀为Hello_World的makfile文件: Makefile.Hello_World;
编译: make –f Makefile.Hello_World
产生可执行程序hello
例2, 编译库文件
建立两个源文件如下:
/*file hello.h*/
#include “ace/Log_Msg.h”
void hello();
/*file hello.cpp*/
#include “hello.h”
void hello()
{
ACE_DEBUG((LM_DEBUG, “hello world!/n”));
}
建立hello.mpc
project(hello dll) : acelib{
sharedname = hello
Source_Files {
hello.cpp
}
Header_Files{
hello.h
}
}
安装例1的方式操作,会在$ACE_ROOT/lib下产生名为libhello.so的库文件。
通过mpc.pl产生的makefile文件,也可以根据需要加以修改,做成满足自己需要的模板,以后就一劳永逸了,哈哈。
MPC使用说明:http://www.dre.vanderbilt.edu/~schmidt/DOC_ROOT/ACE/MPC/docs/USAGE
//