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

标签 c makefile

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

相关文章:

c - c/c++ 中的 3D 或 2D 图形?

c++ - 将 C int 数组重置为零 : the fastest way?

c - 生成随机位 - C rand() 中缺乏随机性

无法打印变量的 scanf_s 值的 ASCII 值

c++ - 为什么文件命令报告动态与 gcc -static 链接

c - 如何将参数值从make命令行传递给编译器

linux - 安装 gcc 4.2.4

c++ - Makefile循环依赖错误

c - 如何在C中将数组写入文件

linux - lib{library name}.a/.so 是 Linux 中静态库的命名约定吗?