Makefile具有不同的头目录?

时间:2018-08-30 18:53:44

标签: c makefile

//Root
Main.c
makefile
objs/  //I want to store the .o files here if possible.
refs/
    - header1.h
    - header1.c
    - up to 8 headers

这是我的文件结构,我知道它不是最好的,但仅用于学校项目。头文件包含在Main.c中,

CC = gcc

INCLUDES = -I/refs

CFLAGS = -g $(INCLUDES)

ODIR = /objs

HLOC = /refs

main.o: main.c 
    $(CC) $(CFLAGS) main.c -o $(wildcard *.o)

main: main.o 
    $(CC) $(CFLAGS) main.c -o main

#clean:
    #rm $(wildcard *.o) 

我不确定如何实际执行此操作,这是我到目前为止所掌握的,但是我不确定如何进行操作或如何使其正常工作。我进行了广泛搜索,找不到答案。

谢谢!

1 个答案:

答案 0 :(得分:0)

我假设顶部的“ Main.c”是拼写错误。我在没有测试的情况下将其放在一起,但至少应该足够好地传达了这个想法。如果您不了解you should read the manual,我在这里使用了一些GNU自动变量。 我创建了一个目标default,该目标将先构建objs,然后再构建bins

# default target, will be called if no target provided
default: objs bins

CC = gcc
INCLUDES = -I./refs
CFLAGS = -g $(INCLUDES)
ODIR = ./objs
HLOC = ./refs

OBJS = $(ODIR)/main.o
BINS = main

# target called from default
objs: $(OBJS)

# target to build your object files
$(ODIR)/%.o: %.c
    $(CC) $(CFLAGS) -c $< -o $@

#target for your binary
main: $(ODIR)/main.o 
    $(CC) $< -g -o $@

#clean build artifacts
clean:
    rm -f $(BINS)
    rm -f $(OBJS)

请不要忘记,配方行上的选项卡是必需的。如果遇到问题,请粘贴错误信息!