MPC使用介绍(二)
下面的内容紧接着MPC使用介绍(一)。 3. 编写MPC和MWC文件 这节将为大家分别介绍各种输入文件类型和语法的详细信息: 3.1 输入文件 MPC处理四种不同类型的文件,但是针对大多数的用户,通常情况下只需要关心mpc文件和mwc文件。 3.1.1 项目文件(mpc) 项目文件(使用mpc后缀),包含了这些信息:包含路径、库目录、源文件以及项目间的依赖关系。一个mpc文件可以有一个或多个的项目,这些项目需要使用唯一的名称来避免项目生成是出现错误,这些项目同时还包括生成的目标类型(库和可执行文件)。 3.1.2 工作区文件(mwc) 工作区在一个mwc文件中定义了一系列的mpc文件、目录以及其他的一些mwc文件。针对每一个mpc文件,工作区创建器调用项目创建器来生成相应的项目。在所有的项目都成功生成之后,将会创建对应的工作区来包含生成的项目,并生成项目之间的依赖关系(只有生成工具支持才会生成)。一个mwc文件可以包含一个或多个使用唯一的名称来进行区别的工作区。如果没有为工作区创建器指定任何和工作区文件,工作区创建器将会在当前目录中搜索所有的mpc文件,并组合成一个单独的工作区来进行处理。 3.1.3 基础项目文件(mpb) MPC中一个重要的特性就是项目之间的继承,项目继承允许用户设置一个基础项目(mpb文件),该基础项目包含所有继承项目都需要的公有信息,包含路径、库目录以及项目间的依赖关系等公有信息都可以包含在该基础项目中,任何从该项目继承的项目都将缺省拥有这些信息。 3.1.4 基础工作区文件(mwb) 同项目一样,工作区同样可以从其他工作区进行继承,一个基础工作区可以提供对于其他一些工作区都需要的相同信息并使用继承关系来是这些工作区都拥有这些信息。 3.2 一般性的输入文件语法 在这一小节中,我们将对不同文件的语法进行一个介绍,并同时介绍该文件类型的中所使用的部分缺省值。 3.2.1 mwc和mwb 在工作区中,可以包含不同的mpc文件和路径,在同一个mwc文件中可以同时定义一个或者多个工作区。例如: workspace(optional name) : optional_base_workspace { file.mpc directory other.mwc exclude(vc6, vc7, vc71, vc8, nmake) { this_directory } } 可以通过在workspace关键字后用括号括起来的字符串来为工作区指定名称,如果没有为工作区指定名称,则使用mwc文件不带文件后缀的文件名来作为该工作区的名称。 工作区同时支持从其他工作区进行继承。在上面的例子中,optional_base_workspace是一个带有工作区信息的mwb文件不带文件后缀的文件名,这些信息将会被从该基础工作区中继承的工作区所使用。 在花括号之间,可以是赋值语句、mpc文件、路径、其他工作区以及排除项。其中列出的mpc文件将会包含在该工作区中;如果一个路径在工作区中出项,则工作区创建器会递归的遍历该目录以及其子目录,并搜索所有的mpc文件;如果一个mwc文件被包含在该工作区中,则该文件将会被聚合到该工作区中来。 赋值语句可以散布在项目和路径之间,并影响项目生成的方式: cmdline设置可以用来实现同从命令行中为mpc.pl脚本提供选项一样的功能(参见命令行选项)。不过,-type、-recurse、-noreldefs、-make_coexistence、-genins、-into、-language以及输入文件将会被忽略。环境变量可以通过$NAME方式来访问(其中NAME是环境变量名)。cmdline设置对于需要正确处理的特殊工作区来说极其有用。 除了上面列出的一些设置之外,mwc.pl脚本还支持的设置是implicit。如果implicit被指定为1,则在没有mpc文件的路径下,将会生成一个缺省的项目,implicit同样可以设置为基础项目的名称,在这种情况下,隐式生成的项目将从继承该基础项目。不论何种方式,如果一个路径下并没有可以用来放置到项目中的文件,则不会生成项目。当你需要定义一个特殊的工作区,而MPC的缺省行为即能生成有效的项目的时候,指定implicit设置将是非常方便的一种方式。 在一个范围中指定的赋值将只影响在该范围中包含的mpc文件和路径。如,在下面的例子中,cmdline设置仅仅影响到在相同范围内的项目,在该例子中,MPC将会针对directory/foo.mpc添加-static选项,而其他在该工作区中列出的mpc文件和路径则不受此影响。 workspace { … static { cmdline += -static directory/foo.mpc } exclude(gnuace, make) { some.mpc } } 排除项用来阻止mpc文件和路径被处理。这些被排除的mpc文件和路径将不会生成项目文件和工作区。可以在exclude关键字之后用括号对需要排除的项目类型进行指定(如上面的例子),该方式将指示工作区创建器只针对列出的项目类型排除生成。如果不指定任何的排除项目类型,则表示排除所有的项目类型。 同C++语言一样,在一行中,所有在//之后的内容都会被视为注释而被忽略掉。 3.2.2 mpc和mpb 3.2.2.1 项目声明 项目声明同工作区声明类似,但是相比要复杂一些。一个mpc文件可以包含一个或者多个项目,并且每个项目都可以从基础项目中进行继承。 project(optional name) : base_project, another_base_project { exename = client in |