通用GNU makefile目录路径

2024-02-27

我正在尝试使用通用的 makefile 来合并一些构建信息。我的问题是我想使用不同子目录级别的 makefile,这使得工作目录值(pwd) 不可预料的。例如:

# Makefile.common
TOP := $(shell pwd)
COMPONENT_DIR := $(TOP)/component
COMPONENT_INC := $(COMPONENT_DIR)/include
COMPONENT_LIB := $(COMPONENT_DIR)/libcomponent.a

如果我包括Makefile.common从子目录中,像这样,$(TOP)目录不正确,其他所有内容均如此:

# other_component/Makefile
include ../Makefile.common
# $(COMPONENT_LIB) is incorrectly other_component/component

最好的获取方式是什么Makefile.common to use its own目录路径而不是更变化无常的路径pwd?


您应该能够使用MAKEFILE_LIST 变量 http://www.gnu.org/software/make/manual/html_node/Special-Variables.html#Special-Variables, 像这样:

# This must be the first line in Makefile.common
TOP := $(dir $(firstword $(MAKEFILE_LIST)))

从文档中:

当 make 读取各种 makefile 时,包括从 MAKEFILES 变量、命令行、默认文件或包含指令获得的任何文件,它们的名称将自动附加到 MAKEFILE_LIST 变量中。它们是在 make 开始解析它们之前添加的。这意味着如果 makefile 所做的第一件事是检查此变量中的最后一个单词,那么它将是当前 makefile 的名称。然而,一旦当前的 makefile 使用了 include,最后一个单词将是刚刚包含的 makefile。

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

通用GNU makefile目录路径 的相关文章

  • @:(符号冒号)在 Makefile 中意味着什么?

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

    所以我有一个具有如下目标依赖项的 makefile all foreach lang LANGS foreach models MODELS targetName model xml lang targetName 目标如下所示 targe
  • 如何调用使用 Define 创建的 GNU make 宏?

    在我的 Makefile 中调用 GREP 的两种方式有什么区别吗 我有什么理由应该使用其中之一 两者似乎产生相同的结果 define GREP word 3 shell echo define FOO 0xfff00100 endef a
  • 如何制作一个makefile只用于编译一些java文件?

    我有三个java文件 名为A java B java C java A将创建对象B B将创建对象C 但我以前从未构建过makefile 有谁可以帮我构建一个 makefile 来编译这三个 java 文件吗 我应该使用什么工具来制作 mak
  • 具有两个同名目标的 Makefile

    我有一个包含包含语句的 makefile 我无法控制包含的 makefile 的内容 不过 我希望能够在 某些 不是全部 目标之前添加一些预处理步骤 考虑以下示例 install echo install target include ot
  • 如果未设置,则从控制台读取 Makefile 变量

    我正在更新一个从外部源访问某些资源的 Makefile 即存在以下形式的规则 External cvs up 对于不受限制的资源 它可以按预期工作 现在 出现了功能漂移 外部资源需要更复杂的登录 因此规则已更改为与此没有太大不同的内容 Ex
  • 在赋值时计算 Makefile 变量

    在 Makefile 中 我尝试将 shell 命令的结果分配给变量 TMP mktemp d tmp XXXXX all echo TMP echo TMP but make Makefile all 正在回显 2 个不同的值 例如 tm
  • makefile 目标依赖项取决于目标名称

    我有以下规则 SPECIAL file1 file2 o cpp a h CC c CFLAGS lt o 我希望如果 is in SPECIAL then b h已添加到依赖项列表中 有没有办法做到这一点 而不重复规则 您可以单独分配其他
  • 描述 makefile 中的头文件位置

    在我正在开发的一个新项目中 我有以下目录结构 Project base src bin h Makefile 在我的源文件中 我包含如下内容 include h SomeHeaderFile h 而不是更正确的形式 include Some
  • 使用 MS NMAKE 打印长编译行

    我有一个遗留的 MS NMAKE Makefile 我需要修复其中的一些错误 我希望调试一些非常长的命令行 这些命令行正在使用 NMAKE 技巧执行 内联文件 http msdn microsoft com en us library se
  • 如何将当前目录捕获为 make 变量中的绝对路径名?

    我想在 GNUmake 文件运行期间获取当前目录并将其放入 make 变量中 执行此操作的语法是什么 像这样的东西吗 DIR PWD Um no PWD有时是在您的环境中定义的 因此由 make 继承 但通常不是 你需要 CURDIR DI
  • 如何复制Makefile中的目录?

    我有一个目录images 我想复制到build images 从 Makefile 中 该目录可能包含多个级别的子目录 最优雅的方法是什么 我想 避免每个目录都复制完整的目录make运行 即不cp r 保证一致性 即如果文件在images
  • 在 Android 构建系统中包含预构建的静态库

    我需要基于预构建的静态库构建一个共享库 我的 makefile src android external mycode Android mk LOCAL PATH call my dir include CLEAR VARS LOCAL A
  • 如何在 Makefile 中自动创建(和删除)临时目录?

    是否可以有make在执行第一个目标之前创建一个临时目录 也许使用一些黑客 一些额外的目标等 Makefile 中的所有命令都可以引用自动创建的目录 TMPDIR 并且该目录将被自动删除make命令结束 以前的这些答案要么不起作用 要么看起来
  • 使用 Makefile 项目在 Visual Studio 中自定义调试命令

    我在 Visual Studio 2010 中有一个由 Makefile 支持的项目 实际上使用 NAnt 但这不是重点 构建过程的输出是一个 elf 文件 我有一个单独的非 VStudio 调试器 可以在该 elf 文件上运行来调试它 构
  • 从 make 文件中禁用 make 内置规则和变量

    我想根据传递禁用内置规则和变量 r and R options http www gnu org software make manual make html Options Summary从 make 文件内部到 GNU make 也欢迎
  • Make:在静态模式规则中设置特定于目标的变量

    我正在使用静态模式规则编写 Makefile 并且我希望为 TARGETS 的每个元素分配一个变量给当前目标名称 此处为 TARGETS a b c d all TARGETS TARGETS DIR TARGETS setup build
  • 如何为 C 和 C++ 制作 makefile,源代码位于子目录中

    我有一个项目目前在 OS X 上的 Xcode 中构建 我正在尝试构建一个 makefile 以允许它在其他 Un x 系统上构建 我是编写 makefile 的新手 所以我一直根据网络上的各种示例拼凑出一个 makefile 也许并不奇怪
  • /usr/bin/ld: 使用 makefile 编译时找不到 -lc

    上下文第一 我有一个标头 event h 一个名为 event c 的程序和主程序 main c 该程序将被编译 首先生成一个目标程序 event o 然后在一个单独的文件夹中生成一个静态库 libevent a 然后生成可执行程序work
  • 如何在makefile中添加多行注释

    有没有办法像 C 语法一样注释掉 makefile 中的多行 不 没有什么比 C 风格更好的了 makefile 中的注释 正如其他人所建议的 您可以通过使用行延续来进行多行注释 例如 This is the first line of a

随机推荐

  • 是否有类似 stackoverflow 投票的 Ajax(原型或 JQuery 插件)示例?

    有没有好的 ajax 示例可以实现类似于 stackoverflow com 的向上和向下按钮的投票 您创建一个投票页面 例如 yoursite com vote postid 1234 direction up 将投票保存在数据库中 然后
  • 从 JTabbedPane 中选定的选项卡获取 JTable

    我有 JTabbedPane 其中包含许多动态生成的 JPanel 其中包含 JTable 如何从选定的 JTabbedPane 选项卡获取 设置 JTable 已尝试使用 JTabbedPane getComponents 但它不包含任何
  • 如何处理将 UTF-8 编码、代码页 = 65001 的文件导入 SQL Server

    在挪威 我们有 3 个非常烦人的角色 它们会造成各种各样的问题 自 sql server 2008 起 Microsoft 决定不再支持代码页 65001 我找到了一个可管理的解决方案 解决使用 OPENROWSET BULK 将 UTF
  • 如何在不使用计时器的情况下在 Windows 服务中进行循环

    我想每 10 秒从 Windows 服务调用一个业务层方法 使用 C 和 NET 完成 但是 我不想使用 Timer Elapsed 事件 因为如果第一个线程 进程仍在运行 它会启动另一个线程 进程 我只需要一个单线程方法 因为对同一业务方
  • ACE 编辑器自动补全大写关键字

    我有一个带有自定义突出显示模式的 ACE 编辑器 基于 sql 模式 一切都工作正常 但我以大写形式定义关键字 当自动完成程序显示可用选项时 它们全部都是小写形式 我检查了旧的 sql 模式 在修改之前 行为完全相同 有什么方法可以将此选项
  • 在 Windows 中通过 OpenSSL 为我的 Android 应用程序创建带有自签名证书的 PKCS#12 文件

    我正在编写一个 Android 应用程序 需要对某些 Web 请求进行 SSL 认证 我需要构建一个 PKCS12 文件 pfx 与自签名证书 我决定使用 OpenSSL 库 但无法在我的计算机 Windows x64 平台 上构建它 我想
  • 即使我在 ADO 中的第一个位置有一个填充的记录集,EOF也会返回 true

    我试图从记录集中的列中获取行 然后将它们插入简单明了的表中 记录集已填充 我使用 MoveFirst 从 rs 的开头开始 但我仍然在开始时得到 EOF true 并且它跳出了 do while 我有一个类似的功能可以工作 但由于某种原因这
  • 如何在不克隆的情况下更改对拥有值的引用?

    我正在练习在阅读这本书时学到的 Rust 概念 我已经能够迭代我的List枚举通过复制Box并分配list到复制的框 但直观上 我觉得必须有一种方法可以 使其指向行中的下一个指针 如果我尝试这样做而不bx clone 像这样 self li
  • 如何在崩溃时创建进程迷你转储而不在 Windows 7 上显式运行 AdPlus?

    我有一个 NET 进程 有时会在某些第 3 方库的本机代码中因 AccessViolationException 而失败 当发生这种情况时 我希望有完整的内存迷你转储 我已阅读此页 http support microsoft com kb
  • 将数值转换为二进制 (0/1)

    我有一个数据框 其中包含不同人的不同种类水果的数量 像下面这样 apple banana orange Tim 3 0 2 Tom 0 1 1 Bob 1 2 2 如何将其转换为二进制矩阵 即如果一个人至少有一个水果 无论他有多少 那么我记
  • 使用 ActiveRecord 连接到 SQL Server

    您是否曾经需要使用 ActiveRecord 连接到 SQL Server 这可能吗 谁能提供一些起点 这是我用的 从这里 http github com rails sqlserver 2000 2005 adapter tree mas
  • 在 R/3.0.2 中安装 minqa 时出错

    我正在安装lme4使用 README md 文件他们的 github 帐户 https github com lme4 lme4我在安装依赖项时失败了 我尝试单独安装它们 但在安装时仍然崩溃minqa包裹 我在 RHEL6 上使用 R 3
  • 数据库插入

    if lines size gt 5 String Actor it next String Bio it next String More Bio it next String Reason it next String Fact it
  • 删除已知提交 ID 的特定提交

    假设我有一个包含以下提交的存储库 git 版本 1 7 1 A gt B gt C gt D gt E我的头在E 现在我想删除 C 同时保持一切相同A gt B gt D gt E 你能帮我看看该怎么做吗 你可以这样做git rebase
  • SOA - 服务应该有多细粒度才能维持性能?

    我正在接手一个项目 从头开始替换一个古老的遗留系统 在我加入之前 该公司聘请了一位顾问 他绘制了系统的基本草图 并大力推行 SOA 这就产生了一长串 实体服务 目的是将它们组成更复杂的服务组合 例如 想要委员会信息的用户可以访问 委员会 服
  • PHP 5.3 + 的 ereg_replace ?

    我已经看到了一个不必重新使用 PHP 5 3 的 ereg 函数的解决方案 PHP 中 eregi 的良好替代方案 https stackoverflow com questions 737198 good alternative to e
  • 如何制作通用类型转换方法

    我想做的是 bool Convert out Object output Object source find type of output convert source to that type if possible store res
  • Pandas:将知识产权解析为国家/地区的最快方式

    我有一个函数find country from connection ip它需要一个 ip 经过一些处理后返回一个国家 地区 就像下面这样 def find country from connection ip ip Do some pro
  • 处理浏览器关闭事件和页面刷新

    在我们的应用程序中 我们需要处理浏览器关闭事件 当用户直接关闭浏览器时 我们应该给他一个警告消息 并根据某些条件直接关闭窗口来阻止他 我们已经通过 body onunload 事件处理了这个问题 问题是我们正在收到警报消息 但在显示警报消息
  • 通用GNU makefile目录路径

    我正在尝试使用通用的 makefile 来合并一些构建信息 我的问题是我想使用不同子目录级别的 makefile 这使得工作目录值 pwd 不可预料的 例如 Makefile common TOP shell pwd COMPONENT D