自动创建.OBJDIR子目录

2024-01-14

操作系统:FreeBSD 11.0-RELEASE

我有以下目录结构:

/xxx/obj/
/xxx/src/deep.cpp
/xxx/flat.cpp
/xxx/makefile

makefile的内容如下:

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

根据这个来源 https://www.bsdcan.org/2014/schedule/attachments/267_freebsd-bmake-slides.pdfbmake(又名 bsdmake?)支持自动创建源外 OBJDIR,但我不知道具体是如何实现的。

在一般情况下,如何配置 bmake 自动创建相关目录?


支持自动创建源外 OBJDIR,但不是您所期望的那样。创建源外 OBJDIRcan实施与bmake(1)指令但不受支持bmake(1)程序本身。也就是说,

  • 如果你使用bmake(1)FreeBSD 附带的指令来构建您的项目,然后 OBJDIR 的创建由obj目标,以便命令make obj将创建 OBJDIR。查看文件bsd.obj.mk https://github.com/freebsd/freebsd/blob/master/share/mk/bsd.obj.mk了解更多文档和实施细节。 FreeBSD 源代码包含许多使用这些指令来构建的程序示例。

  • 如果你使用bmake(1)指令作为(便携式)提供bsdowl 包 https://github.com/michipili/bsdowl,那么OBJDIR的创建是由目标支持并实现的obj这样命令make obj或命令make preparatives使用更通用的目标将创建 OBJDIR。这示例目录 https://github.com/michipili/bsdowl/tree/master/example/langc包含几个基于 C 的示例,展示如何准备 Makefile 以使用bsdowl 包 https://github.com/michipili/bsdowl.

  • 如果您使用自定义bmake(1)指令,那么您将必须自己实现一个负责此创建的目标。文件bsd.obj.mk https://github.com/freebsd/freebsd/blob/master/share/mk/bsd.obj.mk绝对是一个很好的入门资源。

需要注意的重要一点是bmake(1)在处理任何目标之前确定其实际工作目录,这意味着执行请求自行创建 OBJDIR 的目标几乎总是正确的做法。正因为如此,该命令bmake obj all从您的示例中将会失败,并出现与上面报告的相同的错误消息。正确的调用应该是bmake obj && bmake all,从第二个开始bmake(1)进程现在有机会更改为上次运行创建的 OBJDIR。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自动创建.OBJDIR子目录 的相关文章

  • Makefile - 为什么读取命令不读取用户输入?

    我的 Makefile 中有以下代码 Root Path echo What is the root directory of your webserver Eg Server htdocs read root path echo root
  • 制作带有源子目录的文件

    我最新的项目是用 C 编写的 我使用的是 GNU Make 项目目录布局如下 project src subdir1 subdir2 containing tests doc bin 我希望能够致电make在顶级目录中 即项目目录中需要一个
  • Eclipse CDT生成的Makefile在哪里?

    我已经使用 Eclipse helios CDT 构建了一个 hello world C 项目 它编译得很好 但我想看一下生成的 Makefile CDT 我在项目文件夹 调试 发布文件夹或 src 文件夹中找不到它 我在哪里可以找到这个
  • 如何生成缺失的 #include 文件的列表

    背景 我正在开发一个大型 C 项目 其中包含多个可执行文件和库输出 以及一组工作 make 文件 即假设您拥有整个代码库 您可以输入 make 它将构建所有库和可执行文件 我的问题是我必须部分编译该项目 并且只需链接已为项目其他部分编译的库
  • 如何在 Makefile 中将带引号的字符串转换为普通字符串?

    我不确定我是否正确描述了这个问题 但目前我正在通过以下方式解决这个问题 QUOTEDSTR hello world NORMALSTR shell echo QUOTEDSTR 是否有一种更内置的方法可以让 make 在不调用 shell
  • 链接器输入文件未使用的 c++ g++ make 文件

    我无法弄清楚是什么导致了我在制作项目时不断遇到的错误 i686 apple darwin11 llvm g 4 2 lncurses linker input file unused because linking not done 我的
  • 使用 GCC 和 autotools 为各个源文件设置编译标志的最佳方法是什么?

    我需要使用自动工具禁用单个文件的优化标志 最好的方法是什么 您是指单个源文件还是单个可执行文件 禁用可执行文件的优化很简单 bin PROGRAMS myprog myprog SOURCES foo c bar c myprog CFLA
  • 如何在 Mac 上使用 Emscripten emcc 和 make 时包含 ncurses

    我正在尝试构建一个项目 即 Angband 的源代码 http rephial org downloads 3 3 angband v3 3 2 tar gz http rephial org downloads 3 3 angband v
  • 如何制作轨道时间戳

    make 如何保留文件的时间戳 我正在尝试将我的 git 存储库部署到位 我正在为大多数不会改变的文件添加预编译的二进制文件 现在 当我从 git 签出存储库时 我不想编译这些 c 文件 我想使用这些预构建的二进制文件 因此 为了设置这个方
  • makefile 中的路径不起作用

    我正在运行以下命令makefile哪些需要改变dir到特定目标并在那里运行npm install 问题是我能够在输出中看到它将目录 项目 应用程序 打印到正确的目录 但安装 npm install 在上层 项目 上运行 为什么 例如 当我运
  • 编辑 CMakeLists.txt 以使用 -fPIC 进行编译

    我正在尝试为名为 libnifalcon 的 NOVINT Falcon 安装驱动程序 我使用 cmake 创建 make 文件 但是当我运行 make 时出现错误 Linking CXX shared library lib libnif
  • 在 Makefile 的先决条件列表中使用目标的目录路径

    我编写了一个脚本 它接收两个以 cfg 结尾的文件并输出一个以 cmp 结尾的文件 我想将其包含在我的 Makefile 中 因为一些源代码文件依赖于此 cmp 文件 在我的 Makefile 中 我想这样做 cmp cfg dir def
  • 错误:安装 ffi 时出错:错误:无法构建 gem 本机扩展

    我在 Mac 64 位系统中遇到此错误 并且机器上安装了 xcode Building native extensions This could take a while ERROR Error installing ffi ERROR F
  • GNU Make 与 patsubst:需要两次替换

    我需要在变量替换的替换中引用词干两次 O23 OROOTS ODIR overx 2wk 3wk mlb 我需要使用相同的词干执行两次替换 但是替换使用patsubst这只做第一个 我们怎样才能同时实现这两点呢 事实上 杰克几乎猜对了 fo
  • 在 makefile 中,当我在 bash 函数内部使用 if 语句时,它会抛出错误

    在 makefile 中 当我在 bash 函数内部使用 if 语句时 它会抛出错误 test foo if a a then echo 1 fi foo hello ERROR bin sh 1 未找到 或与一个 test foo if
  • 如何不在输出中打印 makefile 中的注释

    我有一个像这样的 makefile install somecommand some explanation for next command lastcommand 发生的事情是评论 some explanation for next c
  • @:(符号冒号)在 Makefile 中意味着什么?

    Makefile 中的以下内容有何作用 rule deps 我在制作手册中似乎找不到这个 它的意思是 不要在输出中回显此命令 所以这条规则是说 执行 shell 命令 并且不回显输出 当然是shell命令 是一个空操作 所以这就是说 什么都
  • 什么是“制定目标”?

    为什么我需要制作一个make target在能够构建我的源代码之前 更具体地说 什么是制定目标 http publib boulder ibm com infocenter rsdvhelp v6r0m1 index jsp topic o
  • 如何在使用cmake完成make后打印消息?

    我正在尝试使用 CMake 完成构建过程后打印消息 我只是想在之后通知用户make命令已完成 没有任何错误 我该怎么做 我试过add custom target 但我无法选择何时跑步 另外 我尝试过add custom command 它再
  • 避免重复 GNU Make 规则

    我一直在编写一个执行一些依赖项生成的 Makefile 我发现自己必须重复规则 因为 遗留 代码库包含以下内容的混合 cpp and cc文件 好像有点难看 无论如何 是否可以指定目标的先决条件可以是 cpp or cc files 所以而

随机推荐

  • 来自数据库的漂亮网址

    我正在尝试在我的网站上获取漂亮的网址 现在它们看起来像这样 www site com tag php id 1 我想把它改成 www site com tag 1 slug 我的数据库表有 ID 标题 信息 Slug 我在网上读到有关 sl
  • 使用 Tortoise SVN 进行恢复

    如果我在 TortoiseSVN 中查看 Subversion 日志 当我选择修订版本并右键单击时 我会看到以下选项 以及其他选项 将项目更新为修订版 恢复到此版本 恢复此版本的更改 有人可以解释一下这3者之间有什么区别吗 我真正想做的是暂
  • 在 sql case 语句中使用比较符号

    我正在寻找一种使用小于和大于符号在 sql select 查询中构建 case 语句的方法 例如 我想根据一个变量选择一个排名 DECLARE a INT SET a 0 SELECT CASE WHEN a lt 3 THEN 0 WHE
  • 检测谁创建了线程(w. Eclipse)

    在 Java 中如何找出谁创建了线程 想象一下 您使用 30第三者复杂插件环境中的 JAR 您启动它 运行大量代码 进行一些计算 最后调用 shutdown 这个生命周期通常工作得很好 除了每次运行时一些 非守护进程 线程保持悬空状态 如果
  • MATLAB 散点图中的线性回归线

    我正在尝试获取两个变量散点图的残差 我可以使用最小二乘线性回归线lslinematlab的函数 但是 我也想得到残差 我怎样才能在matlab中得到这个 为此我需要知道参数a and b线性回归线的 ax b 使用功能polyfit htt
  • 如何在自定义约束验证器中使用注释元素

    我在我的项目中编写了一个名为 CGC 的自定义注释 Target METHOD FIELD ANNOTATION TYPE CONSTRUCTOR PARAMETER Retention RUNTIME Documented Constra
  • Gitlab-Ci:如何在作业之间共享数据

    我想在两个作业之间共享一个文件 并在文件发生更改时对其进行修改 python 脚本比较cache json文件发生更改并有时修改缓存文件 gitlab ci yaml image ubuntu stages test cache key o
  • 如何在包含数据的表上创建序号列索引

    我有下表 其中包含 10 个唯一行 BookingID 是包含随机数的 FK 该数字不需要按顺序排列 BookingID Description 1000 Foo 3000 Bar 1500 Zoo 我需要插入一个名为 ID 的顺序索引 该
  • 咖啡因缓存 - 指定条目的到期时间

    我正在努力进一步加深我对咖啡因缓存 https github com ben manes caffeine 我想知道是否有一种方法可以为缓存中填充的条目指定超时 但其余记录没有基于时间的到期时间 本质上我希望有以下界面 put key va
  • 如何通过部分 ID 值选择 CSS 中的元素?

    我有一些用 PHP 生成的元素 我想知道是否可以选择 id 不完整的元素 例如 div class 1 div div class 2 div div class 1 div div class 2 div 该类已经习惯了它们的共同点 但现
  • Android - 窗口标志

    有没有办法检测窗口标志何时触发 假设我有一个WindowManager LayoutParams FLAG SECURE 当我触发它时如何检测它 我尝试用谷歌搜索问题 但我所得到的只是设置 添加窗口标志 谢谢 在您的活动中只需覆盖onWin
  • 使用元组而不是冻结集作为字典的键是否存在性能差异?

    我有一个脚本 它使用由两个变量组成的键多次调用字典 我知道我的程序将以相反的顺序再次遇到这两个变量 这使得将密钥存储为元组变得可行 创建一个行和列具有相同标签的矩阵 因此 我想知道使用元组而不是冻结集作为字典键是否存在性能差异 在快速测试中
  • SVN:如何在提交时忽略修改的文件? [复制]

    这个问题在这里已经有答案了 我在svn中编辑了一些文件 如下所示 svn st M a M b 现在 我想将我的更改提交到 svn 由于某种原因 我不想提交文件b 有没有快速的方法或命令来忽略修改的文件b 最后 我使用 yzucker解决方
  • C# 任务栏中的 Windows 7 进度条?

    如果您注意到在 Windows 7 Beta 中 如果您复制文件或其他系统操作 任务栏中的 Windows 资源管理器图标将填充一个绿色进度条 相当于表单上的进度条 有没有一种方法可以在我的 C 表单中强制我的任务栏进度条与我正在执行的任何
  • 将数据插入 ms access 表时出现语法错误

    我有以下代码 OleDbConnection aConnection new OleDbConnection Provider Microsoft ACE OLEDB 12 0 Data Source storage db accdb st
  • XPath 表达式对 //element 不返回任何内容,但 //* 返回一个计数

    我将 XOM 与以下示例数据一起使用 Element root cleanDoc getRootElement find all the bold elements as those mark institution and clinic
  • C# 中将父对象转换为子对象

    您好 我想在 C 中将父对象转换为子对象 public class Parent public string FirstName get set public string LastName get set public string Ci
  • 根据计数折叠数据框中所有因子变量的因子级别

    我想根据频率仅保留前 2 个因素级别 并将所有其他因素分组为 其他 我尝试过这个但没有帮助 df data frame a as factor c rep D 3 rep B 5 rep C 2 b as factor c rep A 5
  • 带有 Spring 的 Jersey 2 中的自定义 Jackson ObjectMapper

    我在将 Jersey 从 1 x 迁移到 2 x 时遇到一些问题 我的应用程序使用 Jersey 提供 REST Web 服务 并通过 Jackson 和 Spring 4 以 JSON 形式提供数据来处理依赖项注入 在 Jersey 1
  • 自动创建.OBJDIR子目录

    操作系统 FreeBSD 11 0 RELEASE 我有以下目录结构 xxx obj xxx src deep cpp xxx flat cpp xxx makefile makefile的内容如下 flat out flat o deep