Solution:

  1. Make all command substition in a make done through the assignment operator e.g.
cflags != pkg-config --cflags gtk4
libs != pkg-config --libs gtk4

all:
	gcc $(cflags) -o watch main.c $(libs)

not

all:
	gcc $$(pkg-config --cflags gtk4) -o watch main.c $$(pkg-config --libs gtk4)
  1. add this to your .vimrc: let g:ale_c_parse_makefile = 1

ALE gives me a warning when I use gtk

#include <gtk/gtk.h> /* E: gtk/gtk.h: No such file or directory

This is probably happening because ALE isn’t using my compiler flags gcc $( pkg-config --cflags gtk4 ) -o program main.c $( pkg-config --libs gtk4 ) that I stole from the gtk documentation. These compiler flags allow gcc to find gtk/gtk.h even though it is in gtk-4.0/gtk/gtk.h

How do I make ALE aware of my compiler flags?