问题标签 [vpath]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
327 浏览

makefile - GNU make:指定 VPATH 时的循环依赖

有没有人可以帮助我理解为什么 GNU make 在以下示例中考虑“循环依赖”。如果未指定 VPATH 并且源文件存在于当前目录中,则一切正常。

谢谢你,亚历克斯

0 投票
2 回答
3580 浏览

c - Makefile 将 .o 文件移动到不同的目录

我在一个目录中有源代码,在另一个目录中有一个生成文件。我能够使用 make 系统的 vpath 机制编译代码。.o 文件是在 makefile 所在的同一文件夹中创建的。但我想将这些 .o 文件移动到另一个名为obj. 我尝试了以下方法:

但是,它们仍在与 makefile 相同的文件夹中创建。谁能帮我解决这个问题?

以下是 makefile 的一些突出显示的行:

在此之后,.o 文件也在 Makefile 的同一文件夹中创建。不移动到 obj

0 投票
1 回答
2586 浏览

directory - 更改主 shell 的 makefile 中的目录

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

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

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

我希望 common.make 执行以下操作。

1) 保存 srcpath = 当前路径(当前路径为源目录)
2) 切换到输出目录(这里的目录名是动态的)。
3) 设置 VPATH=srcpath 
4) 现在源目录中的任何 makefile 都可以使用 common.make 来编译并在输出目录中生成二进制文件和对象。

# 这是示例 Makefile 之一。我已经缩短了这个文件。所有 makefile 都没有使用相同的名称,例如 SRCS、CMDSRCS。情况会有所不同。
# 这是现有的makefile。源码位置/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
include ........ #(More includes here)
TARGET = resmgrd
CMDSRCS = resmgr_cli.c \
          resmgrlogshow.c \
# more source files here
CMDOBJS = $(CMDSRCS:.c=. o)
CMDHNDLR = resmgrcmd
#...此处为 CFLAGS,此处为库标志
MDSRC = main.c SRCS
= resmgr.c \
# 此处有更多源文件HDRS
= resmgr.h
MDOBJ = $(MDSRC:.c=.o)
OBJS = $(SRCS:.c=.o)
$(OBJS) $(MDOBJ) $(CMDOBJS): $(HDRS)
DEPENDSRCS = $(MDSRC) $(SRCS) $(CMDSRCS)
ST_LIBS = $(DEVOSLIBSRC)/apixdr/libapixdr.a
$(TARGET): $(MDOBJ) $(OBJS)
    $(CC) $(LDFLAGS) -o $@ $^ $(LDLIBS) $(ST_LIBS)
$(CMDHNDLR ): $(CMDOBJS)
    $(CC) $(LDFLAGS) -o $@ $^ $(DEVOSLIBS) $(IPCLIB) $(KILIB) $(MIAUXLIB) \
            $(RESMGRLIB) $(RBACLIB)
安装:: 安装-服务器
安装服务器:$(TARGET) $(TARGET).options $(DEVOSSBINDIR) $(DEVOSCONFDIR)
    $(INSTALL) -m 755 $(TARGET) $(DEVOSSBINDIR)
安装命令:$(DEVOSBINDIR)/$(CMDHNDLR ) \
    install-admin-cmds install-user-cmds
clean::
    $(RM) $(OBJS) $(TARGET) $(SCRIPTS) $(RAWMAN) $(CMDHNDLR) $(ZIPMAN)

0 投票
2 回答
2658 浏览

code-generation - Automake、生成的源文件和 VPATH 构建

我正在使用 automake 进行 VPATH 构建。我现在也在使用生成的源代码,带有 SWIG。我有Makefile.am这样的规则:

然后该文件稍后使用:

时工作正常$builddir == $srcdir。但是在进行 VPATH 构建(例如mkdir build; cd build; ../configure; make)时,我收到有关缺少的错误消息whatever.cpp

生成的源文件应该转到$builddir还是$srcdir?(我估计可能$builddir。)

应该如何指定依赖项和规则以将生成的文件放在正确的位置?

0 投票
0 回答
368 浏览

c - 在 makefile 中使用 vpath 时遇到问题

我有一堆 src 文件(都在一个文件夹中)和 .h 文件分布在不同的文件夹中。使用makefile,我能够成功构建.c 文件。

现在,我介绍了 2 个 .c 文件,但在与 makefile 不同的文件夹中,无法成功构建。我上网并知道我需要为此使用vpath。但即使在使用 vpath 之后,我在新文件夹中构建 .c 文件时也会出错。

1)在下面的make文件中,后面新增的.c文件是fbpath.c和stream.c。2)我还包括这些 .c 文件引用的包含文件的相对路径。3)然后我添加了 VPATH,指向 .c 文件所在的位置。

我得到的错误是

fbpath.c:30:24:致命错误:config.h:没有此类文件或目录编译终止。

但是 config.h 文件在 INC 中非常存在。我还提供了完整路径。

有人可以指出我所做的任何错误。

谢谢

这是我的制作文件

0 投票
1 回答
264 浏览

makefile - 使文件 vpath 不替换

我制作制作文件没有什么问题,这是代码:

当我尝试执行 make 我得到这个错误:

我不明白为什么 parser.o 没有被正确的路径替换,我使用了自动变量

0 投票
1 回答
301 浏览

makefile - Makefile:可以将 VPATH 变量应用于分配 Makefile 变量吗?

我尝试编写简单的makefile 进行练习。

我有两个目录 1. srcs( .c), 2.include( .h)

并尝试定义包含所有 .c 文件的 SRCS 变量

在当前目录和 srcs 目录中。

下面是我的 Makefile

我将 current/src 目录指定为 VPATH 以进行查找

当前目录和 current/srcs 中的所有 *.c 文件,但

它在 /srcs 目录中找不到 *.c 文件。

在 Makefile 中定义变量时,可能无法使用 VPATH

正确的?如果它是正确的,请让我知道更好的方法:)

谢谢。

0 投票
1 回答
497 浏览

makefile - vpath 中的 V 代表什么?

makefile 中的VPATH变量用于指示搜索路径。但其中的“V”究竟代表什么?

make 变量 VPATH 的值指定了 make 应该搜索的目录列表。大多数情况下,目录应该包含不在当前目录中的必备文件;但是,make 使用 VPATH 作为规则的先决条件和目标的搜索列表。

0 投票
1 回答
332 浏览

makefile - make 'vpath' 指令,为什么它不足以满足这个先决条件?

以下示例 makefile 按预期工作,vpath用于查找目标文件和源文件。但是在最后一行中,我告诉 make 关于一个目标文件对另一个的依赖关系,我需要指定$(objd)/先决条件文件的目录,否则我会收到错误消息(请参阅代码下方的错误消息)。为什么vpath最后一行的指令不够?

也就是说,将最后一行更改为:

给出错误:


使用最后几行的这种形式进行编辑 ,它也可以工作,没有目录规范:

0 投票
0 回答
81 浏览

makefile - Makefile VPath 强制先决条件编译

我正在尝试将一堆对象文件链接到一个共享对象中。我使用 VPATH 指定了一些位于不同目录中的目标文件的位置。如果 .o 文件存在于该目录中,那么我会收到一条错误消息,指出 g++ 找不到 .o 文件。如果我删除其他目录中的目标文件,那么 GNU Make/GCC 会从 VPATH 指定的其他目录中的 .c 编译当前目录中的 .o。那么,即使目标文件存在于 VPATH 指定的其他目录中,如何更改我的 makefile 以便始终在当前目录中构建先决条件目标文件?

这是我的主要制作规则: