Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Directory 更改主shell的makefile中的目录_Directory_Makefile_Gnu Make_Vpath - Fatal编程技术网

Directory 更改主shell的makefile中的目录

Directory 更改主shell的makefile中的目录,directory,makefile,gnu-make,vpath,Directory,Makefile,Gnu Make,Vpath,我的构建系统中有以下场景 一,。src目录中的1000个makefiles 2.所有1000个makefile都包含common.make文件 3.已从源目录为对象目录中的makefiles和源创建链接。因此,makefile中的所有makefiles和更多脚本都是以存在于构建目录中的方式编写的。 4.obj目录是动态位置。 5.现在我删除了所有链接。对象目录中没有更多链接。 6.我希望执行源目录中的所有makefiles,在执行之前,我希望在其中更改对象目录(动态目录名)。(我不能在这里使用m

我的构建系统中有以下场景

一,。src目录中的1000个makefiles
2.所有1000个makefile都包含common.make文件
3.已从源目录为对象目录中的makefiles和源创建链接。因此,makefile中的所有makefiles和更多脚本都是以存在于构建目录中的方式编写的。
4.obj目录是动态位置。
5.现在我删除了所有链接。对象目录中没有更多链接。
6.我希望执行源目录中的所有makefiles,在执行之前,我希望在其中更改对象目录(动态目录名)。(我不能在这里使用make-C,因为我不知道要更改哪个目录)。我可以为查找源设置VPATH。
7.我想使用common.make动态更改目录,但无论我在common.make中使用什么cd$(shell cd…)都不会反映在主Makefile中。
8.如果我不这样做,我将最终修改所有1000个makefile。我不想这样做

请让我知道最好的方法。简单地说,我想在执行1000个makefiles之前更改目录(通过common.make)

我希望common.make做以下事情

1) save srcpath=当前路径(当前路径是源目录)
2) 更改为输出目录(此处的目录名是动态的)。
3) 设置VPATH=srcpath
4) 现在,源目录中的任何makefile都可以使用common.make进行编译,并将二进制文件和对象保存在输出目录中

#这是一个示例生成文件。我缩短了这个文件。并非所有生成文件都使用与SRCS、CMDSRCS相同的名称。那就不一样了。
#这是现有的makefile。Source location/home/user/project/src/mod1/lib/resmgr>make BD=100。我希望输出为
#/home/user/project/build/swout100/mod1/lib/resmgr/*。common.make(common make)可能会在此处验证参数BD。不允许BD=101。
#我们可以强制用户执行make-C/home/user/project/build/swout100/mod1/lib/resmgr(此处没有BD验证。用户应该知道要转到哪个目录)。
#我希望common.make可以作为实用程序makefile帮助用户
TOPDIR=../../..
MAKEDIR=$(TOPDIR)/make
include$(MAKEDIR)/common.make#它包含在大多数makefile中。这可以被视为公共makefile。我想修改common.make
包括#(此处包含更多内容)
TARGET=resmgrd
CMDSRCS=resmgr\u cli.c\
resmgrlogshow.c\
#此处有更多源文件
CMDOBJS=$(CMDSRCS:.c=.o)
CMDHNDLR=resmgrcmd
#... CFLAGS在此,library flags在此
MDSRC=main.c
SRCS=resmgr.c\
#此处有更多源文件
HDRS=resmgr.h
MDOBJ=$(MDSRC:.c=.o)
OBJS=$(SRCS:.c=.o)
$(OBJS)$(MDOBJ)$(CMDOBJS):$(HDRS)
dependsrc=$(MDSRC)$(SRCS)$(CMDSRCS)
ST_LIBS=$(DEVOSLIBSRC)/apixdr/libapixdr.a
$(目标):$(MDOBJ)$(OBJS)
$(CC)$(LDFLAGS)-o$@$^$(LDLIBS)$(ST_LIBS)
$(CMDHNDLR):$(CMDOBJS)
$(CC)$(LDFLAGS)-o$@$^$(DEVOSLIBS)$(IPCLIB)$(KILIB)$(MIAUXLIB)\
$(RESMGRLIB)$(RBACLIB)
安装::安装服务器
安装服务器:$(目标)$(目标)。选项$(DEVOSSBINDIR)$(DEVOSCONFDIR)
$(安装)-m 755$(目标)$(DEVOSSBINDIR)
安装命令:$(DEVOSBINDIR)/$(CMDHNDLR)\
安装管理员cmds安装用户cmds
清洁::

$(RM)$(OBJS)$(目标)$(脚本)$(RAWMAN)$(CMDHNDLR)$(ZIPMAN)

我找到了我问题的答案


我找到了我问题的答案


请向我们展示1000个makefile中的一个(您不想修改)。包括~/project/make/common.make;#大多数makefiles创建二进制文件和对象文件,然后是这个常见的include。这是在前面的输出目录中通过链接完成的。但是现在链接被删除了。每个makefile使用不同的变量名来引用源和对象。因此,没有办法共同改变。现在编译应该在源目录中进行,输出应该到达输出目录。有什么我可以做的共同点。使我的所有二进制文件和对象在输出目录?更改目录是最好的选择,我不知道怎么做。你问的可能是可能的,但这取决于makefile和如何调用它们。没有一种解决方案适用于所有可能的makefile,但是可能有一种解决方案适用于您的特定makefile,或者大多数makefile。如果你把我们要的信息告诉我们,也许我们可以帮助你。好的,我理解。如何在此处附加文件?如果文件不超过40行左右,只需再次编辑您的问题以附加文件即可。(如果更长,您应该先缩短它。)并告诉我们如何调用它(例如
make
make foo
make DEST=somedir
)。请向我们展示1000个makefile中的一个(您不想更改)。包括~/project/make/common.make;#大多数makefiles创建二进制文件和对象文件,然后是这个常见的include。这是在前面的输出目录中通过链接完成的。但是现在链接被删除了。每个makefile使用不同的变量名来引用源和对象。因此,没有办法共同改变。现在编译应该在源目录中进行,输出应该到达输出目录。有什么我可以做的共同点。使我的所有二进制文件和对象在输出目录?更改目录是最好的选择,我不知道怎么做。你问的可能是可能的,但这取决于makefile和如何调用它们。没有一种解决方案适用于所有可能的makefile,但是可能有一种解决方案适用于您的特定makefile,或者大多数makefile。如果你把我们要的信息告诉我们,也许我们可以帮助你。好的,我理解。如何将文件附加到此处?如果