Makefile用于不同目录中的多个文件

时间:2017-10-22 08:14:29

标签: c makefile

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

如果有人可以向我推荐不同的代码,或者按照原样纠正这个问题,我会很高兴。

1 个答案:

答案 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个文件的构建。

相关问题