Makefile 和通配符

2024-05-10

好吧,这是我当前的 makefile 设置。有一些文件名为public01.c, public02.c等等。我正在尝试使用以下方法为每个人制作目标文件public*.o带有通配符的标签。

public*.o: public*.c hashtable.h
    $(CC) $(CFLAGS) -c public*.c

public*: public*.o
    $(CC) -o public* public*.o

但是,当我尝试运行 makefile 时,我得到以下信息:

make: *** No rule to make target `public*.c', needed by `public*.o'.  Stop.

我猜是在治疗public*.c作为标签而不是我想要的通配符。我读到$(wildcard pattern...)函数并使用它,但我并没有真正理解它或让它工作......


简短回答: 该语法不能按您想要的方式工作。在 GNU make 语法中执行所需操作的正确方法是使用模式规则:

public%.o: public%.c hashtable.h
        $(CC) $(CFLAGS) -c $<

public%: public%.o
        $(CC) -o $@ $<

长答案: This:

public*.o: public*.c hashtable.h

并不意味着你想要它的意思。假设你有几个文件public01.c等,并且没有文件public01.o等,在构建开始时,该语法等效于:

public*.o: public01.c public02.c public03.c ... hashtable.h

也就是说,如果public01.o等不存在,则 make 将使用文字字符串public*.o作为文件名。如果其中一些.o文件确实存在,那么该语法相当于:

public01.o public02.o ...: public01.c public02.c ... hashtable.h

看起来像你想要的对吗?但这是 make 的一个常见误解,因为事实上该行与此完全相同:

public01.o: public01.c public02.c ... hashtable.h
public02.o: public01.c public02.c ... hashtable.h

那就是——每一个.o文件依赖于每个.c文件!执行您想要的操作的正确方法是使用模式规则,如上所示。

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

Makefile 和通配符 的相关文章

  • Makefile:对子目录中的所有文件进行操作?

    我正在使用 Makefile 和 GNU make 基于源 Markdown 文件创建各种文档输出目标 这包括使用latex or pdflatex创建 DVI 文件 使用 EPS 或 PS 格式以外的图像会导致错误 我可以在源 Markd
  • MinGW Make 抛出“系统找不到指定的路径。”错误

    我正在尝试在 Windows 7 上使用 cmake 生成一个 c 项目 在实际创建项目之前 cmake 会对您的工具链进行快速测试 我正在使用 MinGW 这就是我的问题所在 Cmake 触发 make 构建 最终失败并返回 系统找不到指
  • mysql 详细查询字符串,如通配符

    不知道如何标题我的问题 哈哈 下面是我需要的 我的数据库中的值如下所示 test example 1 test example 2 test example TD 1 这些值的长度可以不同 test example 只是一个示例 某些值将具
  • 内核makefile中的$(call cmd,tags)这里的cmd指的是什么?

    在内核 Makefile 中我发现如下代码 ctags CTAGS CSCOPE HEADERS SOURCES ETAGS ETAGSFALGS HEADERS SOURCES call cmd ctags 另外 在哪里可以找到宏或函数
  • Makefile 和 .Mak 文件 + CodeBlocks 和 VStudio

    我对整个 makefile 概念有点陌生 所以我对此有一些疑问 我正在 Linux 中使用 CodeBlocks 创建一个项目 我使用一个名为 cbp2mak 的工具从 CodeBlocks 项目创建一个 make 文件 如果有人知道更好的
  • java Runtime.getRunTime().exec 和通配符?

    我正在尝试使用删除垃圾文件 Process p Runtime getRuntime exec 只要我不使用通配符 它 就可以正常工作 即 Process p Runtime getRuntime exec bin rm f specifi
  • 在 GNU C++ 编译器中运行具有多个源文件的程序

    我在 Windows 7 操作系统上使用 DEV GNU c 编译器 我需要知道如何编译具有多个源文件的程序 这是例子 FILE1 void f1 printf this is another file under same program
  • 如何在 Makefile 中定义全局 shell 函数?

    我想定义一个shell函数 bin sh test do some complicated tests 1 2 if something then build thisway 1 2 else build otherway 1 2 fi 这
  • Qt 和 MOC 的困境与简单的制作

    我想这更像是一个 GNU Make 问题 而不是 Qt 和 moc 但这里是 我有一个包含多个目录Q OBJECTS 我有一些简单的代码 它收集所有这些 例如 MOCS shell grep l Q OBJECT HEADERS Assum
  • 查找和替换正则表达式问题

    感谢这里对我其他问题的所有大力帮助 我开始掌握正则表达式 但我仍然对这个一无所知 我的代码是 StreamReader reader new StreamReader fDialog FileName ToString string con
  • makefile 使用目标中定义的变量[重复]

    这个问题在这里已经有答案了 如何使用 make 目标中定义的变量 PHONY foo VAR GLOBAL shell cat tmp global foo echo local gt tmp local VAR LOCAL shell c
  • 描述 makefile 中的头文件位置

    在我正在开发的一个新项目中 我有以下目录结构 Project base src bin h Makefile 在我的源文件中 我包含如下内容 include h SomeHeaderFile h 而不是更正确的形式 include Some
  • 如何复制Makefile中的目录?

    我有一个目录images 我想复制到build images 从 Makefile 中 该目录可能包含多个级别的子目录 最优雅的方法是什么 我想 避免每个目录都复制完整的目录make运行 即不cp r 保证一致性 即如果文件在images
  • MIPS 汇编不支持“.set noat”吗?

    目前 我正在学习GNU as 并在 info as 中找到了很多有用的信息 我发现 set noat 在MIPS指定的代码中使用 但是当在 info as 中搜索该指令时 我在节点 alpha指令 中找到了它的解释 但在 MIPS Depe
  • 将 libpng 链接到 android 原生项目

    我在尝试在本机 Android 项目中加载 libpng 时遇到问题 编译器似乎无法识别 libpng 函数 但可以识别类型 如 png byte 它可以正常编译类型 但如果我添加函数 则会抛出错误 这是编译输出 Windows 7 cmd
  • 链接器失败:存档中的成员不是对象

    我正在尝试在 Windows 7 上使用 64 位 mingw 构建 Open CASCADE 6 7 1 库 我正在使用x86 64 4 9 1 release posix seh rt v3 rev1 from mingw w64 项目
  • 链接 C 代码时如何判断符号的定义位置

    我面临着链接中特定符号的未定义参考问题 error undefined reference to g queue pop nth 我正在 LOP 和 ARM 平台上工作 我们在两个平台上使用相同的环境 我们的 ARM 构建可以毫无问题地链接
  • VB.NET“Like”运算符中可能存在错误?

    为什么下面的评价为True Dim result b Like a b Thanks EDIT 为了概括这一点 以下返回True String1 Like AnyText1 AnyText2 AnyText String1 VBA 工作正常
  • 在 Android 构建系统中包含预构建的静态库

    我需要基于预构建的静态库构建一个共享库 我的 makefile src android external mycode Android mk LOCAL PATH call my dir include CLEAR VARS LOCAL A
  • 从 makefile 内部传递命令行参数

    我有一个 makefile 我试图从中调用一个可执行文件 该可执行文件需要 5 个参数 我如何从 makefile 传递这些参数 这样做不起作用 run exe arg1 somevalue arg2 somevalue arg3 some

随机推荐

  • Matplotlib:生成具有不同和倒置比例的多个双轴

    我想在两个 x 和 y 轴上绘制一个数据系列 以便有 4 个不同的轴 首先是 x 以 eV 为单位的能量 与 y 归一化计数 轴 然后是 x 与能量成反比的波长 与 y 计数 轴 我的代码是 import numpy as np impor
  • 将mysql表限制为一定大小并自动删除最旧的条目[重复]

    这个问题在这里已经有答案了 可能的重复 如何设置MySQL表的最大行数 https stackoverflow com questions 8048001 how can i set a maximum number of rows in
  • XSLT 中是否有一种包含一次?

    I have FileA FileB and FileC FileA包括FileB and FileC FileC包括FileB XSLT 1 0 中是否有一种一次性包含功能 如果你使用
  • 如何匹配和删除队列中的元素?

    根据1800 2012 规格 http standards ieee org getieee 1800 download 1800 2012 pdf Queue delete input int index 删除 SystemVerilog
  • 如何使用Java将h.264直播流编码为RTP数据包

    我正在为 Android 操作系统开发一个应用程序 我需要来自摄像机的实时解码视频流 该视频流使用 h 264 编解码器进行编码 将帧数据转换为 RTP 数据包并将数据包发送到服务器 首先 可以尝试在 PC 上实现从 HDD 中预先录制的视
  • Android getIdentifier 不适用于字符串?

    我真的不知道为什么 但我无法检索字符串的 Id 这是我的代码 int resId getApplicationContext getResources getIdentifier About EmailPrompt string com y
  • MariaDB闲置一段时间后无法工作

    在我的网络应用程序上 我经常遇到以下异常 java sql SQLNonTransientConnectionException 无法发送查询 最后一个数据包未完成 它通常发生在系统长时间闲置之后 重新启动 tomcat 可以暂时解决该问题
  • C中的链表按升序排序

    我正在为我的 C 编程课程编写一个程序 该程序应该为我们提供使用链表的经验 作业的最后部分之一要求我们获取一个链接列表 并使用我们之前在程序中编写的前置或附加函数按升序对其进行排序 struct lnode int datum struct
  • 设置具有不同输入的测试方法

    我想在 C 中测试所有代码路径的以下方法 public int foo int x if x 1 return 1 if x 2 return 2 else return 0 我见过这个pex单元测试 http fernandomachad
  • 我可以在谷歌云功能上托管nodejs GRPC服务器吗?

    我有一个在 AWS 实例上运行的 Nodejs GRPC 服务器 并且想迁移到谷歌云功能 这可能吗 我的无服务器选项有哪些 对的 这是可能的 to use 云功能 https cloud google com functions 为您gRP
  • Git:由于看似随机的合并,更改不断丢失

    我有一种感觉 这将是一个显而易见的答案 但我似乎无法解决 似乎发生的情况是 我向服务器提交 推送了一些更改 并且我的副本上的一切都显示正常 然后 另一位开发人员从同一分支的服务器中拉取 据我所知 据称看到了我的更改 进行一些修改 将它们提交
  • 如何设置 $!在 Perl 中

    我想在 perl 中编写一些设置 的函数 与内置 perl 函数类似 当我尝试执行此操作时 它抱怨 参数 无法创建管理员用户 在标量分配中不是数字 我试过用谷歌搜索这个 但不幸的是谷歌不会在 所以结果很难得到 if createUser a
  • Java 基准测试 - 为什么第二个循环更快?

    我对此很好奇 我想检查哪个函数更快 所以我创建了一些代码并执行了很多次 public static void main String args long ts String c sgfrt34tdfg34 ts System current
  • 访问 bash 命令行参数 $@ 与 $*

    在许多 SO 问题和 bash 教程中 我发现可以通过两种方式访问 bash 脚本中的命令行参数 gt cat testargs sh bin bash echo you passed me echo you passed me 结果是 g
  • Kivy - 获取任何 Android 设备上 DCIM 文件夹的路径

    我想确切地知道如何仅使用 Kivy 获取 Android 上 DCIM 文件夹的路径 PyJinus 不是一个选项 因为它目前不适用于 Python 3 5 到目前为止我尝试过的是 DATA FOLDER os getenv EXTERNA
  • 从 servlet 向 applet 发送数据:我怎样才能实现这个?

    我要发送 发送HashMap反对请求它的小程序 servlet 具有这样的功能HashMap目的 我有办法做到这一点吗 Applet requests HashMap object gt Servlet listens to this re
  • 当模拟器存在时 Flutter 应用程序不运行

    模拟器在那里 但当我启动应用程序时它不起作用 请帮忙 我已经尝试了一切 Cal Flutter 新手 我已遵循安装指南并尝试了其他堆栈流答案的修复 我正在运行 Windows 8 1 单一用户 我已经从命令提示符和 android 终端中尝
  • AttributeError:类型对象“Word2Vec”没有属性“load_word2vec_format”

    我正在尝试实现 word2vec 模型并收到属性错误 AttributeError 类型对象 Word2Vec 没有属性 load word2vec format 下面是代码 wv Word2Vec load word2vec format
  • 访问网络编码性能测试的响应

    WebTestRequest request1 new WebTestRequest this Context Environment ToString IBWeb DefaultSB aspx request1 Headers Add n
  • Makefile 和通配符

    好吧 这是我当前的 makefile 设置 有一些文件名为public01 c public02 c等等 我正在尝试使用以下方法为每个人制作目标文件public o带有通配符的标签 public o public c hashtable h