我是创建 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/