首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GNU Make: chdir make进程本身

GNU Make: chdir make进程本身
EN

Stack Overflow用户
提问于 2017-08-28 09:10:35
回答 2查看 197关注 0票数 1

可以使用makefile将make流程本身定向到chdir吗?我想写一个makefile,它需要从build目录中执行。

假设我有一个项目目录结构,如下所示

代码语言:javascript
复制
project/
├── Makefile
├── include
│   └── Foo.h
├── src
│   └── Foo.cpp
└── test
    └── FooTest.cpp

make目录做的第一件事就是创建一个build目录。

代码语言:javascript
复制
project/
├── Makefile
├── _build
├── include
│   └── Foo.h
├── src
│   └── Foo.cpp
└── test
    └── FooTest.cpp

为了简化我的规则,可以将makefile指向chdir_build中吗?

我希望能够写作(例如)

代码语言:javascript
复制
foo : Foo.o
    $(LD) $^ -o $@ $(LDFLAGS)

而不是

代码语言:javascript
复制
_build/foo : _build/Foo.o
    $(LD) $^ -o $@ $(LDFLAGS)

我知道我可以将构建目录添加到VPATH中,以影响路径解析,但只使用chdir本身似乎更简单。有没有办法做到这一点(最好不用guile)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-28 10:19:23

您可以创建一个简单的Makefile来转发所有内容:

代码语言:javascript
复制
.DEFAULT_GOAL := all
.PHONY: ${MAKECMDGOALS}
$(filter-out all,${MAKECMDGOALS}) all: .forward-all ; @:
.forward-all:
        ${MAKE} -C build ${MAKECMDGOALS}
# Never try to remake this makefile.
${MAKEFILE_LIST}: ;
.SUFFIXES:
票数 1
EN

Stack Overflow用户

发布于 2020-01-24 15:17:56

GNU Make不能做到这一点,但NetBSD的bmake可以做到这一点。

假设我们有一个具有以下结构的项目:

代码语言:javascript
复制
.
├── foo.c
├── makefile
└── obj/

foo.c是一个简单的C程序,它只依赖于标准库。

代码语言:javascript
复制
/* foo.c */
#include <stdio.h>

int main() {
    printf("%s\n", "hi there");
}

makefile使用GNU Make和bmake的公共子集。一般来说,坚持公共子集是单调乏味的,不值得这样做,这只是为了举例。

代码语言:javascript
复制
default: foo

.c.o:
    $(CC) -c -o $@ $<

foo : foo.o
    $(CC) -o $@ foo.o

运行bmake会产生以下输出

代码语言:javascript
复制
$ bmake
cc -c -o foo.o /tmp/make-example/foo.c
cc -o foo foo.o

并生成以下目录结构

代码语言:javascript
复制
.
├── foo.c
├── makefile
└── obj/
    ├── foo
    └── foo.o

通过检查输出可以清楚地看出,bmake几乎立即chdir进入了obj目录。obj目录中的输出路径是相对路径,源目录中的路径是绝对路径。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45910674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档