Note that there are some explanatory texts on larger screens.

plurals
  1. POMakefile issue: smart way to scan directory tree for .c files
    primarykey
    data
    text
    <p>I am doing a project which is growing pretty fast and keeping the object files up date is no option. The problem beyond wildcard command lies somewhere between "I do not want recursive makefiles" and "I do not want it to list by hand". The objects are supposed to go into a separate directory, which works already. Note: I am not <em>that</em> used to makefiles, I know the basics, but everything beyond...</p> <p>So my question: <b> How to scan a src folder recursively and do that in a smart manner?</b></p> <p>I already did it with multiple SRC variables but that's ugly and clutters the whole makefile with an increasing number of directories.</p> <p>What I currently use is:</p> <pre><code>OS = Linux VERSION = 0.0.1 CC = /usr/bin/gcc CFLAGS = -Wall -g -D_REENTRANT -DVERSION=\"$(VERSION)\" LDFLAGS = -lm `pkg-config --cflags gtk+-2.0` `pkg-config --libs gtk+-2.0` BUILDDIR = build SOURCEDIR = src HEADERDIR = src SOURCES = $(wildcard $(SOURCEDIR)/*.c) OBJECTS = $(patsubst $(SOURCEDIR)/%.c, $(BUILDDIR)/%.o, $(SOURCES)) NAME = cinnamon BINARY = cinnamon.bin ECHO = echo RM = rm -rf MKDIR = mkdir INSTALL = install .PHONY: all clean setup all: $(BINARY) $(BINARY): $(BUILDDIR)/$(OBJECTS) $(CC) $(CFLAGS) $(LDFLAGS) -I$(HEADERDIR) -I$(SOURCEDIR) $(OBJECTS) -o $(BINARY) $(BUILDDIR)/%.o: $(SOURCEDIR)/%.c $(CC) $(CFLAGS) $(LDFLAGS) -I$(HEADERDIR) -I$(SOURCEDIR) -c $&lt; -o $@ setup: $(MKDIR) -p $(BUILDDIR) install: $(INSTALL) -m 755 -o 0 -g 0 -d $(DESTDIR)/usr/local/bin/ $(INSTALL) -m 755 -o 0 -g 0 $(BINARY) $(DESTDIR)/usr/local/bin/$(BINARY) $(INSTALL) -m 755 -o 0 -g 0 -d $(DESTDIR)/usr/local/$(NAME)/ui/ $(INSTALL) -m 644 -o 0 -g 0 ./ui/*.ui $(DESTDIR)/usr/local/$(NAME)/ui/ # $(INSTALL) -m 755 -o 0 -g 0 -d $(DESTDIR)/usr/local/$(NAME)/model/ # $(INSTALL) -m 644 -o 0 -g 0 ./model/*.model $(DESTDIR)/usr/local/$(NAME)/model/ clean: $(RM) $(BINARY) $(OBJECTS) distclean: clean help: @$(ECHO) "Targets:" @$(ECHO) "all - buildcompile what is necessary" @$(ECHO) "clean - cleanup old .o and .bin" @$(ECHO) "install - not yet fully supported" </code></pre> <p>Thanks to answer #1 it boils down to how to solve this:</p> <pre><code>$(BUILDDIR)/%.o: $(SOURCEDIR)/%.c $(CC) $(CFLAGS) $(LDFLAGS) $(SOURCETREE) -c $&lt; -o $@ </code></pre> <p>especially in the case of BUILDDIR = build and SOURCEDIR having to be replaced with the single .c files from SOURCES including their paths :/</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload