Makefiles giving the compiler files that dont/shouldnt exist

68 Views Asked by At

I have a basic Makefile setup for C OpenGL programming but when running there are 2 files passed to clang that shouldnt exist and i have no idea why. The problem happened after i added glad and glfw to the project.

code:

    CC = clang
    `CCFLAGS = -lGL -lglfw -std=c++20 -v -Wall -Wextra -Wepedantic -g -lgdi32
    LDFLAGS = lib/glad/src/glad.o lib/glfw/src/libglfw3.a -lgdi32 -lm 
    SRC = $(wildcard src/*.c)
    OBJ  = $(SRC:.c=.o)
    BIN = bin

all: libs build

libs:
    cd lib/glad && $(CC) -o src/glad.o -Iinclude -c src/glad.c
    cd lib/glfw && cmake . -G 'Unix Makefiles' && make

build: $(OBJ)
    $(CC) -o $(BIN)/build $^ $(LDFLAGS)

%.o %.c:
    $(CC) -o $@ -c $< $(CCFLAGS)

run:
    ./bin/build.exe

ERROR: clang: error: no such file or directory: 'all.o' clang: error: no such file or directory: 'libs' clang: error: no such file or directory: 'build'

1

There are 1 best solutions below

0
On

When asking questions please include the command you typed, the command make printed, plus at least the first and last few lines of error messages (properly formatted as code blocks).

I'm assuming that the extra quote character is an error in your cut and paste; please take a moment to review your question after you post it (or even better, using the preview before you post it). You are writing this one time, but tens or hundreds of people will spend their time reading it. Please be considerate enough to make it easy for them.

Your problem is this:

%.o %.c:
        $(CC) -o $@ -c $< $(CCFLAGS)

You want to say "build a .o file from a .c file using this rule", but %.o %.c: says instead, "build both a .o and a .c file, from nothing, using this rule".

You need:

%.o: %.c
        $(CC) -o $@ -c $< $(CCFLAGS)