GNU Make 3.8.1
我正在研究什么是软件产品的插件。该插件构建在主产品的子目录中,因此目录结构类似于:
产物
产品/ src目录
产品/插件
product / plugin / myPlugin
其中" myPlugin"是我正在处理的插件的名称。我想做的是,能够构建myPlugin以及myPlugin的另一个版本,称之为myPlugin-lite。这个插件与myPlugin具有相同的源,但使用不同的标志并在makefile中定义。我们的想法是创建myPlugin树结构的副本,仅包含myPlugin的makefile,并使用myPlugin 中的源构建。所以目录结构如下:
产物
产品/ src目录
产品/插件
产品/插件/为myplugin
产品/插件/为myplugin-精简版
myPlugin将在其子目录中构建并创建其所有目标,myPlugin-lite将在其子目录中构建并创建其所有目标。我在这里找到了一些解决方案:http://make.mad-scientist.net/papers/multi-architecture-builds/并且在这些选项中,符号链接似乎是最好的,但它仍然感觉不像'#34;对"这样做的方式。
我的问题是,这是最好/最简单/最易维护的方法吗?如果不是什么选择?
答案 0 :(得分:0)
如果myPlugin
中唯一需要的是源文件,则完全 VPATH
和The vpath
Directive的用途。
4.5.1 VPATH:所有先决条件的搜索路径
make变量VPATH的值指定应搜索的目录列表。通常,目录应包含不在当前目录中的必备文件;但是,make使用VPATH作为规则的先决条件和目标的搜索列表。
因此,如果当前目录中不存在列为目标或先决条件的文件,则make会在VPATH中列出的目录中搜索具有该名称的文件。如果在其中一个文件中找到文件,则该文件可能成为先决条件(参见下文)。然后,规则可以指定先决条件列表中的文件名,就好像它们都存在于当前目录中一样。请参阅使用目录搜索编写配方。
在VPATH变量中,目录名称以冒号或空格分隔。列出目录的顺序是在搜索中后跟make的顺序。 (在MS-DOS和MS-Windows上,分号用作VPATH中目录名的分隔符,因为冒号可以在驱动器号后面的路径名中使用。)
例如,
VPATH = src:../headers
指定一个包含两个目录src和../headers的路径,这些目录按顺序进行搜索。
使用VPATH的这个值,以下规则
foo.o : foo.c
被解释为它是这样编写的:
foo.o : src/foo.c
假设文件foo.c在当前目录中不存在,但可以在目录src中找到。
另请参阅MadScientist的How Not to Use VPATH,了解更多关于它们不适用的内容。虽然这很大程度上只是你已经阅读过的多架构建造纸的构建。