操作系统: FreeBSD 11.0-发布
我有以下目录结构:
/xxx/obj/
/xxx/src/deep.cpp
/xxx/flat.cpp
/xxx/makefilemakefile的内容如下:
flat.out: flat.o
deep.out: src/deep.o我建公寓没有问题:
/xxx $ make flat.out
c++ -O2 -pipe -c /xxx/flat.cpp -o flat.o
cc -O2 -pipe flat.o -o flat.out
/xxx $ ls obj
flat.o flat.out但当我试图建立深度的时候,它失败了:
/xxx $ make deep.out
c++ -O2 -pipe -c /xxx/src/deep.cpp -o src/deep.o
error: unable to open output file 'src/deep.o': 'No such file or directory'
1 error generated.
*** Error code 1
Stop.
make: stopped in /xxx如果然后手动创建/xxx/obj/src,它就成功了:
/xxx $ mkdir obj/src
/xxx $ make deep.out
c++ -O2 -pipe -c /xxx/src/deep.cpp -o src/deep.o
cc -O2 -pipe src/deep.o -o deep.out
/xxx $ ls obj
deep.out flat.o flat.out src
/xxx $ ls obj/src
deep.o根据本源 bmake (又名bsdmake?)支持自动创建源代码外的OBJDIR,但我不知道具体如何创建。
在一般情况下,如何配置bmake来自动创建相关目录?
发布于 2016-12-27 15:39:20
支持自动创建源代码外的OBJDIR,但并不是您所期望的那样。源外OBJDIR的创建可以用bmake(1)指令实现,但bmake(1)程序本身不支持。尽管如此,
obj目标支持并实现OBJDIR的创建,以便命令make obj将创建OBJDIR。有关更多文档和实现细节,请参见文件bsd.obj.mk。FreeBSD源代码包含了许多使用这些指令构建的程序示例。obj支持并实现OBJDIR的创建,以便命令make obj或使用更通用目标的命令make preparatives创建OBJDIR。示例目录包含了几个基于C的示例,展示了如何准备Makefile来使用https://github.com/michipili/bsdowl构建项目。bsd.obj.mk文件无疑是开始这方面工作的一个很好的来源。需要注意的一点是,bmake(1)在处理任何目标之前确定其实际工作目录,这意味着执行请求单独创建OBJDIR的目标几乎总是正确的。因此,示例中的命令bmake obj all将失败,其错误消息与前面报告的错误消息相同。正确的调用应该是bmake obj && bmake all,因为第二个bmake(1)进程现在有机会更改为上一次运行创建的OBJDIR。
https://stackoverflow.com/questions/41273497
复制相似问题