Makefile - 移动目标文件

2023-12-13

经过一番搜索后,我成功地将以下 Makefile 放在一起:

CC = gcc
CFLAGS = -c -Wall
LDFLAGS = 
SOURCEFILES = main.c
SOURCES = src/$(SOURCEFILES)
OBJECTS = $(SOURCES:.c=.o)
EXECUTABLE = netsim

all: $(SOURCES) $(EXECUTABLE)

$(EXECUTABLE): $(OBJECTS)
    $(CC) $(LDFLAGS) $(OBJECTS) -o $@

.c.o:
    $(CC) $(CFLAGS) $< -o $@

clean:
    rm -rf netsim $(OBJECTS)

我希望能够将我的目标文件移动到另一个目录中,但一直在努力使其工作。我缺少什么?


诀窍是不要移动你的物体。
你应该build it and 从它们构建的地方使用它.

例如,您有以下目录结构:

$ tree .
├── Makefile
├── include
│   └── common_head.h
├── obj
└── src
    ├── foo.c
    └── main.c

手动执行:

$ gcc -o ./obj/foo.o  -c ./src/foo.c  -I ./include  # Build Object #
$ gcc -o ./obj/main.o -c ./src/main.c -I ./include
$ gcc -o exe ./obj/foo.o ./obj/main.o               # Build Executable #

Makefile 来模拟上面的内容

C_FLAGS := -g -Wall -Wextra
CC := gcc
RM := rm
LINKFLAGS := -lanylibrary

.PHONY: $(TARGET)
.PHONY: clean

VPATH:= ./src/ ./obj/ ./include/

# Path for .c , .h and .o Files 
SRC_PATH := ./src/
OBJ_PATH := ./obj/
INC_PATH := -I ./include

# Executable Name 
TARGET := exe

# Files to compile
OBJ1 := foo.o \
        main.o

OBJ := $(patsubst %,$(OBJ_PATH)%,$(OBJ1))

# Build .o first
$(OBJ_PATH)%.o: $(SRC_PATH)%.c
                @echo [CC] $<
                @$(CC) $(C_FLAGS) -o $@ -c $< $(INC_PATH)                  

# Build final Binary
$(TARGET):      $(OBJ)
                @echo [INFO] Creating Binary Executable [$(TARGET)]
                @$(CC) -o $@ $^ $(LINKFLAGS)

# Clean all the object files and the binary
clean:   
                @echo "[Cleaning]"
                @$(RM) -rfv $(OBJ_PATH)*
                @$(RM) -rfv $(TARGET)

所以当你做一个 Make

$ make -B
[CC] src/foo.c
[CC] src/main.c
[INFO] Creating Binary Executable [exe]

查看试运行使用情况make -n

$ make clean ; make -n
g++ -g -Wall -Wextra -o obj/foo.o  -c src/foo.c  -I ./include
g++ -g -Wall -Wextra -o obj/main.o -c src/main.c -I ./include
g++ -o  exe  obj/foo.o obj/main.o -lanylibrary

因此,构建后的目录结构应该如下所示。

$ tree .
├── Makefile
├── exe
├── include
│   └── common_head.h
├── obj
│   ├── foo.o
│   └── main.o
└── src
    ├── foo.c
    └── main.c

所以从我之前的回答来看。
你不必使用任何PHONY move并且也不会不必要地重新创建任何对象。

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

Makefile - 移动目标文件 的相关文章

  • Eclipse CDT生成的Makefile在哪里?

    我已经使用 Eclipse helios CDT 构建了一个 hello world C 项目 它编译得很好 但我想看一下生成的 Makefile CDT 我在项目文件夹 调试 发布文件夹或 src 文件夹中找不到它 我在哪里可以找到这个
  • 创建一个简单的 Makefile 来构建共​​享库

    我正在尝试创建一个非常基本的手工制作的 Makefile 来创建一个共享库来说明一点 这是我到目前为止所拥有的 SHELL bin sh CC gcc FLAGS std gnu99 Iinclude CFLAGS fPIC pedanti
  • 如何生成缺失的 #include 文件的列表

    背景 我正在开发一个大型 C 项目 其中包含多个可执行文件和库输出 以及一组工作 make 文件 即假设您拥有整个代码库 您可以输入 make 它将构建所有库和可执行文件 我的问题是我必须部分编译该项目 并且只需链接已为项目其他部分编译的库
  • 防止 GNU make 在环境变量中扩展美元符号

    有没有办法让 GNU Make 在环境变量中按字面意思解释美元符号 获取这个 makefile echoFOO echo FOO 像这样运行它 FOO a bc make echo ac ac 我希望它能从字面上回应 a bc 但我找不到一
  • Android.mk 与 Application.mk

    我对 Android mk 和 Application mk 的使用有点模糊 我尝试阅读 APPLICATION MK HTML ANDROID MK HTML 在NDK 附带的文档 http developer android com s
  • makefile 中的路径不起作用

    我正在运行以下命令makefile哪些需要改变dir到特定目标并在那里运行npm install 问题是我能够在输出中看到它将目录 项目 应用程序 打印到正确的目录 但安装 npm install 在上层 项目 上运行 为什么 例如 当我运
  • 在 Linux 上的 makefile 和 Makefile 之间进行选择

    我想在一个目录中同时使用 Makefile 和 makefile 进行 make 默认情况下 它将执行makefile 我可以选择执行 Makefile 吗 提前致谢 最简单的选择是使用 f make f Makefile From man
  • 使用 gnu make 正确构建 git 子模块

    我目前尝试编写一个 Makefile 来正确构建一个包含 git 子模块的项目 该子模块有自己的一组 makefile 并一次生成多个目标 包括一些库 该 Makefile 应具有以下属性 即使使用并行构建 也不要重建两次子模块 当子模块代
  • 如何链接 ndk 应用程序中的任何库

    From 本教程 http marakana com forums android examples 49 html 看到我有一个预构建的静态库 名为stackoverflow a它有stackoverflow h 现在我想使用该静态库的功
  • Readelf 报告程序是共享库而不是可执行文件

    使用独立的 Android NDK r10e 工具链 使用 toolchain x86 clang3 6 开关构建 出现这种奇怪的行为 交叉编译的环境变量已设置在运行makefile之前 SYSROOT指向Android工具链位置 CXX等
  • mingw32-make 的目录更改错误

    我正在MinGW32下构建POCO库1 6 0 环境 Windows 7 Ultimate 32位 shell MSYS 执行成功 配置 configure Configured for MinGW config make的内容 POCO
  • 检查 makefile 中的文件大小,如果文件太短则停止

    有没有办法检查特定文件的大小是否小于某个常量 我在 makefile 中假设有关大小的事情 并希望确保如果不满足我的假设 我会收到错误 类似于断言 但在 makefile 中 if filesize file gt C then error
  • 在 Unix 中,我可以在目录中运行“make”而无需先 cd 到该目录吗?

    在 Unix 中 我可以运行make在没有的目录中cd首先进入该目录 make C path to dir
  • 通过相同的 Makefile 生成 Makefile 的包含文件

    在我的程序中 我有一个有点复杂的构建过程 目前 在我使用的一个目录中include in Makefile am对于一个文件 该文件不存在 但必须自行构建 原因是这个包含文件相当长 此外 在实际程序中 它不仅仅是一个文件 而是多个文件 并且
  • 使用 GNU make “从源代码树中”构建 C 程序

    我想使用 GNU make 工具为我的微控制器构建一个 C 项目 我想以一种干净的方式来做这件事 这样我的源代码在构建后就不会被目标文件和其他东西弄乱 想象一下我有一个名为 myProject 的项目文件夹 其中有两个文件夹 myProje
  • 如何调用位于其他目录的Makefile?

    我正在尝试这样做 我想打电话给 make Makefile存在于其他目录中 abc可以使用位于不同目录中的 shell 脚本的路径 我该怎么做呢 由于 shell 脚本不允许我cd进入Makefile目录并执行make 我怎样才能编写she
  • 在 Mac OS X 上的 Makefile 中设置 PATH(但它适用于 Linux)

    我可以在 Linux 上的 Makefile 中设置 PATH 但不能在 Mac OS X 上设置 在 OS X 中 可以设置 PATH 但不会使用 这是一个演示 在带有 bash 4 1 2 1 release 和 GNU Make 3
  • 在 docker 镜像 python:3.9.13-alpine3.16 上使用“pip install psutil”错误:找不到 linux/ethtool.h

    我尝试在 docker 中安装 python 模块 psutilpython 3 9 13 alpine3 16但它报告了以下错误 Building wheels for collected packages psutil Building
  • 避免重复 GNU Make 规则

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

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

随机推荐

  • 必需的自定义 WooCommerce 结帐字段不会验证输入的值

    我在店面子主题中添加 WooCommerce 自定义结账字段functions php file 它们具有 必需 属性 目的是让这些字段出现在页面顶部 账单字段之前 当单击 提交 按钮继续付款时 我收到所需的自定义字段验证错误 请填写您的姓
  • Asp.Net MVC:URL 太长的请求和错误处理

    通过检查我的 elmah 日志 我发现我不断收到 网址太长 请求 错误是 System Web HttpException 0x80004005 The length of the URL for this request exceeds
  • 二维数组变量指针混淆

    我对二维数组 C 语言 有一个基本的疑问 考虑二维数组的声明如下 int array 3 5 现在 当我执行以下操作时 以下 printf 的输出是相同的 printf u n array printf u n array 现在尝试以下操作
  • python 中多行和单行字符串文字的优点是什么?

    我知道三引号字符串用作文档字符串 但是真的需要两个字符串文字吗 是否有任何用例可以区分单行和多行 在 Clojure 中 我们有 1 个字符串文字 是多行的 我们将其用作文档字符串 那么为什么Python会有这样的差异呢 必须明确创建多行字
  • 保存对此范围的访问权限

    我将颜色存储在按钮上的数据属性中 我想在切换中使用该颜色 但是 当我尝试使用访问数据信息时this 没有可用数据 我怎样才能保持对正确的访问this scope 我试图只切换不包含 Skip 的元素的给定颜色 html div div
  • 如何在 Excel VBA 表单中嵌入浏览器?

    以前我用过微软的网页浏览器许多 VB6 和 Excel VBA 表单中的控件 我需要再做一次 但我不知道该怎么做 我尝试打开一个旧的 VB6 项目 但收到以下错误消息 Line 17 Class SHDocVwCtl WebBrowser
  • 在虚拟机上自动进行测试,无需图形会话

    语境 我在 Windows 上运行并使用 UFT Ranorex 在虚拟机 很少 上执行自动化 GUI 测试 执行由 Jenkins 进行试点 Problem VM 必须有一个活动的graphic会话 否则 UFT 将不会运行 GUI 测试
  • 在 flutter 中构建应用程序 2 次后构建失败

    在 VS code 中构建我的 flutter 应用程序后 我成功运行了该应用程序 一切正常 但在应用程序重新启动两次或多次后 每当我再次运行代码时 构建都会失败 这是弹出的错误 Target debug android applicati
  • iOS swift NumberFormatter 十进制样式本地化

    我正在与NumberFormatter Style decimal我需要 20000 23 应该是 20 000 23 因为我创建了一个扩展 var NumerWithDecimalPoint String if self let numb
  • mysql 中的 GROUP BY 特性 [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我有以下 SQL 表和查询 如 sqlfiddle 中所示 http sqlfiddle com 2 37eda 1 0 当前结果如下所示 id definition id serv
  • 列出 Windows 中打开文件句柄的所有者进程?

    我目前在程序的事件查看器中收到 句柄不足 错误 列出哪些进程正在使用文件句柄的好程序是什么 一个例子是 nix 世界中的 lsof 使用流程浏览器 http technet microsoft com en us sysinternals
  • 在 CIFilter 中使用 CIColor 中的 CIImage:获取空图像

    我正在尝试创建一个具有混合模式 如叠加或乘法 的 CIFilter 相关代码 Let s try a filter here Get the data NSData imageData UIImageJPEGRepresentation i
  • 从周数查找一周的开始结束日期

    我使用 servlet 和 JSP 构建了一个 Web 应用程序 并在 Servlet 内计算了周数 private int findWeekNumber String myDate throws ParseException Simple
  • Auto Div 高度取决于另一高度

    我有以下情况我希望 Div2 高度根据 Div3 的内容调整大小 我怎样才能做到这一点 DIV1 DIV2 DIV3
  • Chrome 扩展程序可从脚本中提取文本

    我正在尝试使用 Chrome 扩展的 JS 从脚本标记中提取 webId 22 22 var 字符串 我当前正在使用的示例允许我提取页面标题 payload js chrome runtime sendMessage document ti
  • 根据另一个数据框更改数据框的值

    我再次需要您的帮助来解决一个对于初学者 R 用户来说不太清楚的可能简单的问题 我需要操作一个数据框来替换NA值由 现实 的值来满足另一个应用程序 数据帧包含 3 0 的值 这是原始数据库中无效值的标志 我需要的是用来自另一个数据帧的数据替换
  • 如何在 Touch UI 中添加强制下拉字段

    我将 必需 添加为 真实 但它不起作用 required 为 true 仅适用于文本字段 根据下面的文档 我没有看到任何从下拉列表中添加必填字段的选项 http docs adobe com docs en aem 6 0 author a
  • 为什么 Promise.then 'onFulfilled' 函数在 setTimeout 回调之前触发? [复制]

    这个问题在这里已经有答案了 有人可以解释为什么 Promise then 函数在 setTimeout 函数之前触发吗 我本以为 setTimeout 函数会首先安排在事件循环上 所以它会在 Promise then 函数之前运行 setT
  • 运算符如何重载|专门实现了 C++ 范围适配器?

    自从范围被合并到 C 20 中以来 我一直在查看标题以了解如何operator 对于范围视图来说超载 但我找不到关于如何或在何处实现它的正确轨道 C R 相当于R C根据https en cppreference com w cpp ran
  • Makefile - 移动目标文件

    经过一番搜索后 我成功地将以下 Makefile 放在一起 CC gcc CFLAGS c Wall LDFLAGS SOURCEFILES main c SOURCES src SOURCEFILES OBJECTS SOURCES c