gpt4 book ai didi

c - 不同目录中多个文件的 Makefile

转载 作者:行者123 更新时间:2023-11-30 16:39:55 26 4
gpt4 key购买 nike

我是创建 makefile 的新手,如果有人可以帮助我,我会很高兴。

我已经为函数定义(包括主函数)创建了几个头文件(用于函数声明)和相应的 .c 程序(总共 8 个)。这些列在 .../include/ 目录中。此外,我在编译后创建了另一个目录来存储输出文件:.../bin/。我尝试链接 .o 文件,但没有成功。我附上了一小段 makefile 代码(类似的代码来自互联网):

CC  =   g++
CFLAGS = -Wall -O3
INC_DIR := /media/sf_~share/151*/Codes/include
OBJ_DIR := /media/sf_~share/151*/Codes/obj
INC_FILES := $(wildcard $(INC_DIR)/%.c)
OBJ_FILES := $(patsubst $(INC_DIR)/%.c, $(OBJ_DIR)/%.o, $(INC_FILES))

all : $(APP)
$(APP) : $(OBJ_FILES)
$(CC) $(CFLAGS) -o $@ $^

$(OBJ_DIR)/%.o : $(INC_DIR)/%.c
$(CC) $(CFLAGS) -o $@ $<

clean:
rm -f *.o $(APP)

如果有人可以建议我使用不同的代码,或者按原样纠正它,我会很高兴。

最佳答案

您的 Makefile 中有一些错误:

通配符的使用

对于wildcard expansion,您应该使用*.c而不是%.c ,像这样:

INC_FILES   :=  $(wildcard $(INC_DIR)/*.c)

Patsubst 用法

您无需为 patsubst 指定完整模式 $(INC_DIR)/%.c,只需使用:

OBJ_FILES   :=  $(patsubst %.c, %.o, $(INC_FILES))

缺少 $(APP) 值

我不知道您是否只是忘记将其添加到示例中,但由于 $(APP) 是一个空字符串,因此 makefile 会显示:

make: Nothing to be done for `all'.

添加 APP := program 会触发 include 中所有 *.c 文件的构建。

关于c - 不同目录中多个文件的 Makefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46871919/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com