我是创建makefile的新手,如果有人可以帮助我,我会很高兴。
我为函数定义(包括main函数)创建了几个头文件(用于函数声明)和相应的.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)
如果有人可以向我推荐不同的代码,或者按照原样纠正这个问题,我会很高兴。
答案 0 :(得分:0)
Makefile中有一些错误:
通配符用法
您应该使用*.c
而非%.c
wildcard expansion,如下所示:
INC_FILES := $(wildcard $(INC_DIR)/*.c)
Patsubst用法
您不需要为$(INC_DIR)/%.c
指定完整模式patsubst
,而只需使用:
OBJ_FILES := $(patsubst %.c, %.o, $(INC_FILES))
缺少$(APP)值
我不知道您是否忘记将其添加到示例中,但由于$(APP)
是一个空字符串,因此makefile说:
make:没有什么可以为'all&#39;。
做
添加APP := program
会触发*.c
中所有include
个文件的构建。