【问题标题】:building makefile project with multiple .c files使用多个 .c 文件构建 makefile 项目
【发布时间】:2018-05-13 15:25:30
【问题描述】:

我有以下项目结构(使用eclipse)

project/
 |____ inc/
 |       |___ config_prog.h
 |       |___ prog_lib.h
 |
 |____ data/
 |       |___ img.bmp
 |
 |__ prog_lib.c
 |__ main.c
 |__ makefile

我制作了以下makefile:

CC=gcc
CFLAGS= -O0 -c -Wall -mavx2 -mfma
LDFLAGS=

SOURCES=$ main.c inc/prog_lib.c
OBJECTS=$(SOURCES:.c=.o)

EXECUTABLE=main

all: $(TASKMAP) $(SOURCES) $(EXECUTABLE)

$(EXECUTABLE): $(OBJECTS) 
    $(CC) $(LDFLAGS) $(OBJECTS) -o $@ -lm

.c.o:
    $(CC) $(CFLAGS) $< -lm -o $@

clean: 
    rm -fr $(OBJECTS) $(EXECUTABLE)

但是当我尝试构建项目时出现以下错误:make: *** No rule to make target 'inc/prog_lib.c', needed by 'all'. Stop.

谁能告诉我问题所在?

【问题讨论】:

  • 问题是SOURCES=$ main.c inc/prog_lib.c,应该是SOURCES=$ main.c prog_lib.c
  • ...在您将-Iinc 传递给编译器之前,您可能会在查找头文件时遇到问题,我相信您在尝试构建这些文件时会发现命令行。

标签: c makefile


【解决方案1】:

阅读有关GNU make 的更多信息并花时间阅读其documentation

你的变量赋值

 SOURCES=$ main.c inc/prog_lib.c

错了。应该是

 SOURCES= main.c prog_lib.c

您可能还需要(最好询问-g 以方便debugging with gdb

CFLAGS= -O0 -c -Wall -g -mavx2 -mfma -Iinc

也尝试make -p 以了解内置规则。你应该更好地使用它们(然后在你的CFLAGS 中使用-c 可能是错误的)。

考虑使用remake,也许是remake -x,来调试你的Makefile;或至少make --trace

顺便说一句,我认为您的文件层次结构过于复杂且不合适。对于这样一个简单的小项目,有一个inc/ 目录是不值得的。

为了获得灵感,请研究一些现有 free softwareMakefile,例如在github.

【讨论】:

  • 谢谢你,现在它工作得很好......我接受了你关于项目结构的建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-18
相关资源
最近更新 更多