logo
down
shadow

Why does makefile recompiles everything when a headerfile is changed?


Why does makefile recompiles everything when a headerfile is changed?

By : HarishSingh
Date : November 21 2020, 04:01 AM
will be helpful for those in need You have a rule that says that all .o files built from .c files also depend on the contents of $(DEPS)
code :
%.o: %.c $(DEPS)
    $(CC) -c $(CFLAGS) $< -o $@
DEPS=main.h a.h b.h c.h d.h
a_functions.o: a.h
main.o: a.h b.h
depend:
    makedepend -- $(CFLAGS) -- $(SRCS)


Share : facebook icon twitter icon
Makefile always recompiles

Makefile always recompiles


By : programmer91
Date : March 29 2020, 07:55 AM
will help you i am having a hard time with the Makefile below. It always recompiles because it is looking for the objects in "source/" instead of "objects/". , This should do it:
code :
$(OUTDIR)$(EXECUTABLE) : $(FP_OBJ)
    $(LD) $(LD_FLAGS) $^ $(LIB)

$(FP_OBJ) : $(OBJ_DIR)%.o : $(SRC_DIR)%.cpp
    $(CC) $(CC_FLAGS) $@ $<
$(OBJ) : $(SRC)
    $(CC) $(CC_FLAGS)$(OBJ_DIR)$@ $(SRC_DIR)$*.cpp
Eclipse CDT generate makefile with makefile.init, makefile.defs, makefile.targets

Eclipse CDT generate makefile with makefile.init, makefile.defs, makefile.targets


By : user2344720
Date : March 29 2020, 07:55 AM
this will help The three includes are intended for your sake. If you need to compile something proprietary manually, or copy files or anything you can come up with before the main program is compiled, you create the file makefile.init in the source directory and put your makefile-stuff in here.
The same applies to the other files just at other times in the compile chain.
Makefile recompiles after cleaning objects (but not the name target)

Makefile recompiles after cleaning objects (but not the name target)


By : dexmond
Date : March 29 2020, 07:55 AM
wish help you to fix your issue The $(NAME) dependecy in the all rule is NOT satisfied, because $(NAME) depends on $(OBJS) - and $(OBJS) does not exist (after make clean). This is how make works. If any dependencies don't exists or are newer than the target - the dependecies need to be regenerated (and in turn - the target).
For example: program --> program.o --> (program.c, program.h)
Makefile that only recompiles changed objects?

Makefile that only recompiles changed objects?


By : rosyheart
Date : March 29 2020, 07:55 AM
I hope this helps . Modified your Makefile to:
Automatically generate header dependencies. Re-build and re-link when Makefile changes.
code :
CXX := g++
LD := ${CXX}
CXXFLAGS := -Wall -Wextra -std=gnu++14 -pthread
LDFLAGS := -pthread

exes :=

# Specify EXEs here begin.

Main.SOURCES := Main.cpp initializeArray.cpp printArray.cpp
exes += Main

# Specify EXEs here end.

all: $(exes)

.SECONDEXPANSION:

get_objects = $(patsubst %.cpp,%.o,${${1}.SOURCES})
get_deps = $(patsubst %.cpp,%.d,${${1}.SOURCES})

# Links executables.
${exes} : % : $$(call get_objects,$$*) Makefile
    ${LD} -o $@ $(filter-out Makefile,$^) ${LDFLAGS}

# Compiles C++ and generates dependencies.
%.o : %.cpp Makefile
    ${CXX} -o $@ -c ${CPPFLAGS} ${CXXFLAGS} -MP -MD $<

# Include the dependencies generated on a previous build.
-include $(foreach exe,${exes},$(call get_deps,${exe}))

.PHONY: all
Makefile that recompiles only if its dependency actually changed

Makefile that recompiles only if its dependency actually changed


By : Danial Zaghi
Date : March 29 2020, 07:55 AM
To fix the issue you can do What you suggested doing in your last paragraph is the usual way of conditionally rebuilding targets only if a particular dependency has actually changed, rather than just if that dependency's time stamp has changed. In the rule that generates the particular dependency, you generate it as a temporary file, check to see if its contents have changed and if so replace the target of the rule with the temporary file. Notably, GCC has been doing this in its makefiles as long as I can remember. It generates source code and header files with things like tables and pattern recognizers that often don't change when one of their dependencies does. Stopping targets that are dependants of these generated files from being rebuilt can make a big difference in build times.
So for your example makefile you could do something like:
code :
date.h: FORCE
        echo "#define DATE" '"' $$(date '+%D-%H:%M') '"' > date.h.tmp
        if test -r date.h;                                              \
        then                                                            \
                cmp date.h.tmp date.h || mv -f date.h.tmp date.h;       \
        else                                                            \
                mv date.h.tmp date.h;                                   \
        fi
Related Posts Related Posts :
  • Making conversion similar to BN_hex2bn + BN_bn2bin without openSSL in C
  • I don't understand how the time complexity for this algorithm is calculated
  • MACRO in LHS or RHS of == (!=) operator inside if() condition in C?
  • C: Initialize array of character pointers (strings) and iterate through a file using fgets to put value in these strings
  • extended ASCII characters not working in int 10h
  • how to handle a mathematical function in C language like MATLAB
  • Random derangement memory leak
  • C POSIX ERE without back-references
  • Will disabling interrupts protect a non-volatile variable or can reordering happen?
  • define 2D array dimensions by random numbers in C
  • How to tell if FILE* is referring to a directory?
  • Use printf for ternary operator arguments with mixed types
  • Use of function pointers in C on data structure development
  • Determine Cpu cache associativity
  • Endianness and shift operator in C language, am I doing it correctly?
  • How to use `strtoul` to parse string where zero may be valid?
  • Segmentation fault every third running my program, using mallloc
  • ATM withdrawing money using only 50s and 20s bills C
  • Alphabets not appearing from array (Strange characters appearing)-C programming
  • Rpn calculator: How to free an element that was popped from the stack?
  • CreateFile over USB HID device fails with Access Denied (5) since Windows 10 1809
  • C, minus operator in multiply
  • Is cache invalidation promised in this implementation
  • Assigning memory size dynamically causes stack smashing error
  • Mutex and thread in c
  • Segmentation Fault while copying unsigned int values in C
  • visual studio code debug C request timeout
  • Understanding indirection through pointers and taking address
  • How can I delete extra break line when read txt in C
  • recv() recieves incorrect data
  • How to make a string out of 3 user input strings in c
  • Can't find issue with "Too many arguments for format"
  • How to print \n on a string during a child process on a fork
  • redundant operations in disassembled c code
  • C output of hexadecimal division different from all other sources
  • C- getchar() re-read characters?
  • C : String comparing
  • Find the maximum sum of positive integers in an array in C language
  • Needs debugging symbols for __alignof__
  • Segmentation fault (core dumped) when using my own struct with pointers to array
  • Converting an uint8_t[] to an IP address string
  • Do the printf statements in this example invoke Undefined Behavior?
  • C Accept Client Socket "Invalid Argument" Error when adding Signal Thread
  • Another invert char array in C
  • A function, which contains a struct, that is declared in the following function?
  • Hashing int16_t to uint64_t
  • free() freezing in visual studio C
  • p is a pointer to a structure, what do all these code snippets do?
  • Android-NDK: Run time errors when using shmget, shmctl, shmdt in Android API 27
  • Is shifting the signed bit of a signed short undefined behaviour in C?
  • How to implement arithmetic right shift in C
  • What happen if passing the address of the stack variable to the pthread function?
  • How to add zeros after the significant digits after decimal in C?
  • C - strcspn() function skipping over the longer strings in my array
  • Do calls to shmget or shmat initialize data?
  • why `execv` can't use implicit convert from char** to char* const*?
  • Avoid pressing enter with getch() on linux ( GCC ) "No-echo"
  • A struct initialised in a function how can i use the values?
  • Facing problems with the atoi function if used repeatedly
  • Assigning a pointer to a larger array to a pointer to a smaller VLA
  • shadow
    Privacy Policy - Terms - Contact Us © bighow.org