如何从特定的目标文件生成特定的二进制文件?

2024-03-27

这是我的 makefile,我在 obj/ 目录中有目标文件,我需要将它们编译成 bin/ 文件夹中的二进制文件,但不知何故它无法按我希望的方式工作,有什么想法吗?

SOURCES= $(wildcard *.c)
OBJECTS:= $(patsubst %.c, %.o, $(SOURCES))
OBJECTS:= $(addprefix obj/,$(OBJECTS))
NAMES:= $(patsubst %.c, %, $(SOURCES))
NAMES:= $(addprefix bin/,$(NAMES))
CC=gcc
CFLAGS= -Wall -c -o
DIRS = bin obj

all: $(DIRS) $(NAMES)

$(NAMES): $(OBJECTS)
    $(CC) -o $@ $<

obj/%.o: %.c 
    $(CC) $(CFLAGS) $@ $<

$(DIRS):
    mkdir -p $@

clean:
    rm -rf $(DIRS)

实际输出:

mkdir -p bin
mkdir -p obj
gcc -Wall -c -o obj/task1.o task1.c
gcc -Wall -c -o obj/task2.o task2.c
gcc -Wall -c -o obj/task3.o task3.c
gcc -o bin/task1 obj/task1.o
gcc -o bin/task2 obj/task1.o
gcc -o bin/task3 obj/task1.o

预期输出:

mkdir -p bin
mkdir -p obj
gcc -Wall -c -o obj/task1.o task1.c
gcc -Wall -c -o obj/task2.o task2.c
gcc -Wall -c -o obj/task3.o task3.c
gcc -o bin/task1 obj/task1.o
gcc -o bin/task2 obj/task2.o
gcc -o bin/task3 obj/task3.o

在此规则中:

$(NAMES): $(OBJECTS)
    $(CC) -o $@ $<

each可执行文件取决于all对象。自从$<只抓住第一个先决条件,你看到的只是obj/task1.o.

这样做:

bin/%: obj/%.o
    $(CC) -o $@ $<

或者这样:

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

如何从特定的目标文件生成特定的二进制文件? 的相关文章

随机推荐

  • 在 docker 容器内使用 RVM 等版本管理器是一种不好的做法吗?

    我是使用 docker 的新手 到目前为止我无法找到许多包含的 ruby rails 图像RVM or rbenv 我看到的最常见的事情是每个容器有多个tags每个标记的图像版本都有only one安装的 Ruby 版本 看到这个image
  • 我可以从另一个进程中卸载 DLL 吗? (Win32)

    我想从另一个进程卸载 DLL 是否可以 如果是 该怎么做 我使用的是Win32 API 非常感谢 是的 这是可能的 它称为 DLL 弹出 某些 DLL 注入器具有该功能 通常加载 DLL 的方式是通过加载库 http msdn micros
  • 如何:片段内的gridview?

    我想创建一个像 android market 一样的 gridview 我想用互联网上数据库中的图像填充它 它需要与 androidv4 support 一起使用 因为我想运行 2 2 直到 4 0 有人说 在4 0之前不可能创建gridv
  • 如何将 DateTime.TryParse 与 Nullable 一起使用?

    我想使用 DateTime TryParse 方法将字符串的日期时间值获取到 Nullable 中 但是当我尝试这个时 DateTime d bool success DateTime TryParse some date text out
  • CheckedChanged 事件中的问题

    我有一个复选框 并且我已订阅 CheckedChanged 事件 处理程序在那里执行一些操作 我以编程方式选中和取消选中该复选框 例如 chkbx Name Checked true 并且 CheckedChanged 事件被触发 我希望仅
  • 如何创建链式管道?

    我想创建一个简单的链式管道 我发现this https stackoverflow com questions 33658355 piping output from one function to another using python
  • SSIS 脚本组件不允许文本流输出

    我正在尝试使用 SSIS 将 JSON 文件导入到我的数据库中 由于我使用的是 SQL Server 2016 因此我可以将文件放在一行中并使用 OPENJSON 读取它们 我的问题是不想只引入 JSON 文本 我还想需要从文件名和当前目录
  • 如何将CAP文件加载到java卡

    我是java卡的新手 你能帮我看看如何将Applet CAP文件解析为APDU吗 用于将此 CAP 文件安装到支持 GP2 2 的卡上 你应该尝试使用GPShell http sourceforge net projects globalp
  • 无法在 Mac OS X 10.6 上的 Python 中将 Matplotlib 中的字体更改为 Helvetica

    我正在尝试将 matplotlib 字体更改为 helvetica 我想在 PDF 图中使用它 我尝试以下操作 import matplotlib matplotlib use PDF import matplotlib pylab as
  • 将用户重定向到不同 ASP.NET Core Razor 网站中的页面

    我有一个 ASP NET Core 2 1 Razor 应用程序 其中有两个在登录前处于活动状态的菜单项 我想在单击任一菜单项时转移 重定向 到其他网站 我尝试过重定向 如下所示 但当前 url 添加到我指定的字符串中 public IAc
  • 根据水年创建日索引

    我正在处理水文数据 我需要水年 我已经根据之前在此论坛上发布的功能成功创建了一个水年专栏 我想要的是有一个陪伴water day范围从 1 365 闰年为 366 以匹配水年序列 请注意 水年是由其结束的日历年指定的 例如 2010水年从2
  • Linux IPC:共享内存回收

    我有两个进程 生产者和消费者 通过使用生成的共享内存段进行通信 old https stackoverflow com questions 21311080 linux shared memory shmget vs mmap接口而不是 m
  • 将 ENGINE 上下文附加到 SSL_CTX

    我想知道是否有可能附加一个ENGINE 实施到SSL CTX and or SSL 结构 我想要实现的是拥有一个SSL CTX 将使用 OpenSSL 中内置的默认加密操作和另一个设置SSL CTX 将使用专用 HSM 作为加密层 我可以通
  • Ext.data.Store getTotalCount() 加载后不计算

    我的商店在调用时并不总是返回正确数量的记录getTotalCount 这个问题出现在我之后load 商店 我知道在检查时商店里有记录 我正在使用 ExtJs 4 1 3 this grid reference to my grid var
  • Swift:使用未声明的类型

    我正在实现一个类 但出现此错误 使用未声明的类型 myProtocol 这是我的代码 class LocalContactService myProtocol 你们中有人知道为什么我会收到此错误吗 我遇到了同样的错误 在我的情况下 我意外地
  • shinyapps setAccountInfo 错误

    当我尝试配置我的shinyapps根据以下指南在 my shinyapps io 上注册帐户信息https github com rstudio shinyapps blob master guide guide md https gith
  • Excel VBA - 将图表保存为 GIF 文件

    编程不是我的主要工作职能 但似乎是我所认为的瑞士军刀 我的任务是在 Excel 中制作一个 VBA 宏 将图形导出到 gif 文件 以便自动更新我们制造工厂的信息屏幕 我有一个可以工作的宏 但是 它有时会失败并创建一个具有正确文件名但 空
  • 实体框架中实体之间的复杂关系

    也许它是重复的 但我找不到任何这样的主题 我正在使用实体框架 数据库中有两个表 public class A public virtual B B1 get set public virtual B B2 get set public cl
  • ORA-01722: 实体框架上的编号无效

    我正在从 Oracle DB 执行一个存储过程 即 PROCEDURE GET TIM USER CUSTO P ANOMES IN VARCHAR USER CUSTO OUT SYS REFCURSOR IS BEGIN OPEN US
  • 如何从特定的目标文件生成特定的二进制文件?

    这是我的 makefile 我在 obj 目录中有目标文件 我需要将它们编译成 bin 文件夹中的二进制文件 但不知何故它无法按我希望的方式工作 有什么想法吗 SOURCES wildcard c OBJECTS patsubst c o