最近的项目有 windows solaris 两个版本。其中 windows 下用的编译器是 visual studio 2005

Solaris 下的是 CC 。我们现在的方案是先在 visual studio 2005 下测试通过。然后使用 MPC

Make Project Creator 生成 vcproj solaris 下的 makefile 文件。最后再对这两个工程文件进行测试。

MPC 是一个开源项目,采用 perl 语言编写。使用 MPC 只需写一次 mpc 文件即可非常容易的生成 vcproj( 支持 vc6 – vc9) 文件和 makefile 、语法也不复杂。 ACE 的工程文件就是用的这个东西。十分适合跨平台的项目。

MPC 使用

在工程根目录下创建 MPC/config/MPC.cfg 文件,文件内容为:

Default_type=make

Dynamic_type=$Test_root/bin/mpcfile,/home/test/MPC

Logging=info=1 warn=1

Verbose_ordering=1

1 行注明了生成工程文件的类型,在这里是 makefile

2 行引用了两个地方的 project 定义 ( MPC 文件 ) ,有了这一行,则工程文件中任意位置的 mpc 文件都可以引用上面两个地方 ( 包含子目录 ) mpc mpb 文件了。

mpc 文件是可以继承的。示例如下:

project(mod1):modob{

       exename=”mod1”

       exeout=”../../bin”

       includes+=”../../include/mod1”

      

       Source_Files{

              *.cpp

       }

       Header_Files{

              *.h

       }

}

其中 exename 为生成文件的名称, exeout 为生成的文件的路径, includes 为头文件包含的路径。

还有libout(lib文件输出路径), dllout(动态链接库输出路径), sharedname(动态链接库名称)

Mpb 文件主要是用来描述一些公共的信息 ( 如公共头文件,动态库 ) ,如:

Project {

       Includes += ../../include/common

       Libpaths+=”../../lib”

}

完成上面文件之后,输入命令: mwc.pl 即可生成工程文件

注意:在路径中切不可包含空格

mwc.pl -static 生成静态库

在MPC文件中可以加上 avoids += shared

这样就能避免生成动态的工程了(exe或dll)


MPC使用介绍

 
MPC是ACE中附带的一个很有用的Makefile工具,简单的说MPC可以通过一个单一的定义文件,生成各种开发环境需要的Makefile,VC工程文件,并且可以通过自行扩展适合各种开发环境需要的工程文件。

编写一个MWC和MPC文件

hello.mwc例子

						// -*- MPC -*-
workspace {
  hello.mpc}

hello.mpc例子

						// -*- MPC -*-
project(hello):aceexe, acexml, avoids_ace_for_tao {
  exename = hello
  avoids += uses_wchar
 
  Source_Files {
    hello.cpp}}

mwc可以看作是workspace定义,mpc可以看作是project定义,一个workspace可以包含多个project,并且可以定义多个project之间的依赖关系,详细的语法可以参考后面提供的参考资料。

生成Makefile

生成Makefile

$ACE_ROOT/bin/mwc.pl -type make hello.mwc

生成VC2008工程文件

$ACE_ROOT/bin/mwc.pl -type vc9 hello.mwc

同时生成多个工程文件

$ACE_ROOT/bin/mwc.pl -type make -type vc9 hello.mwc

同时生成vc9的静态和动态库工程文件,并且通过工程名称予以区别

$ACE_ROOT/bin/mwc.pl -type vc9 -ti lib:vc9lib -name_modifier *_lib_vc9 hello.mwc