Note that there are some explanatory texts on larger screens.

plurals
  1. POGNU Make producing a totally different result
    primarykey
    data
    text
    <p>This is confusing. I have my Makefile:</p> <pre><code>OBJECTS = INCLUDE_BUILD_PATH = /Users/wen/Projects/include # Change compilation settings here COMPILE = g++ override COMPILE_FLAGS += -O2 # Change linker/compiler specific settings here LD_FLAGS := CC_FLAGS := -c -I$(INCLUDE_BUILD_PATH)/bigint # Add source extensions here SRC_EXT = cpp cc # Add header dependencies here HEADERS = $(wildcard *.hpp) $(wildcard $(INCLUDE_BUILD_PATH)/*/*.hh) # Add source files here CC_FILES = $(wildcard *.cpp) $(wildcard $(INCLUDE_BUILD_PATH)/*/*.cc) CC_O_BUFFER = $(CC_FILES) CC_O_BUFFER := $(CC_O_BUFFER:.cpp=.o) CC_O_BUFFER := $(CC_O_BUFFER:.cc=.o) OBJECTS = $(CC_O_BUFFER) # Change .exe name here EXE_NAME = maketest # Link object files $(EXE_NAME): $(OBJECTS) $(COMPILE) $(COMPILE_FLAGS) $(LD_FLAGS) -o $@ $^ # Build source files define compile_rule %.o : %.$1 $$(COMPILE) $$(COMPILE_FLAGS) $$(CC_FLAGS) -o $$@ $$&lt; endef $(foreach EXT,$(SRC_EXT),$(eval $(call compile_rule,$(EXT)))) # Clean clean: rm -f $(OBJECTS) $(EXE_NAME) # Debug Build debug: @echo "Rerun with COMPILE_FLAGS=-D_DEBUG" # Print variables print: @echo $(CC_FILES) @echo $(OBJECTS) @echo $(HEADERS) </code></pre> <p>it compiled successfully at first, but then it stopped for no reason and this was the output:</p> <pre><code>Yoshi-Air:maketest wen$ make c++ -c -o maketest.o maketest.cpp maketest.cpp:4:10: fatal error: 'BigIntegerLibrary.hh' file not found #include "BigIntegerLibrary.hh" ^ 1 error generated. </code></pre> <p>the problem was, I didn't even tell it to use "c++" in the Makefile but "g++" instead. Also, when I cleared <code>CC_FLAGS</code> the <code>-c</code> was still there. It's like Make's having a mind of it's own.</p> <p>If I use <code>make print</code> to print out my variables it seems to be all right:</p> <pre><code>maketest.cpp /Users/wen/Projects/include/bigint/BigInteger.cc /Users/wen/Projects/include/bigint/BigIntegerAlgorithms.cc /Users/wen/Projects/include/bigint/BigIntegerUtils.cc /Users/wen/Projects/include/bigint/BigUnsigned.cc /Users/wen/Projects/include/bigint/BigUnsignedInABase.cc maketest.o /Users/wen/Projects/include/bigint/BigInteger.o /Users/wen/Projects/include/bigint/BigIntegerAlgorithms.o /Users/wen/Projects/include/bigint/BigIntegerUtils.o /Users/wen/Projects/include/bigint/BigUnsigned.o /Users/wen/Projects/include/bigint/BigUnsignedInABase.o maketest.hpp /Users/wen/Projects/include/bigint/BigInteger.hh /Users/wen/Projects/include/bigint/BigIntegerAlgorithms.hh /Users/wen/Projects/include/bigint/BigIntegerLibrary.hh /Users/wen/Projects/include/bigint/BigIntegerUtils.hh /Users/wen/Projects/include/bigint/BigUnsigned.hh /Users/wen/Projects/include/bigint/BigUnsignedInABase.hh /Users/wen/Projects/include/bigint/NumberlikeArray.hh </code></pre> <p>Any help or advice will be appreciated. Thanks!</p> <h1>Update</h1> <p>I updated my <code>print</code> to print the expected execution of compile:</p> <pre><code>print: @echo $(CC_FILES) @echo $(OBJECTS) @echo $(HEADERS) @echo "Compiles with:" @echo $(COMPILE) $(COMPILE_FLAGS) $(LD_FLAGS) $(CC_FLAGS) </code></pre> <p>Result:</p> <pre><code>maketest.cpp /Users/wen/Projects/include/bigint/BigInteger.cc /Users/wen/Projects/include/bigint/BigIntegerAlgorithms.cc /Users/wen/Projects/include/bigint/BigIntegerUtils.cc /Users/wen/Projects/include/bigint/BigUnsigned.cc /Users/wen/Projects/include/bigint/BigUnsignedInABase.cc maketest.o /Users/wen/Projects/include/bigint/BigInteger.o /Users/wen/Projects/include/bigint/BigIntegerAlgorithms.o /Users/wen/Projects/include/bigint/BigIntegerUtils.o /Users/wen/Projects/include/bigint/BigUnsigned.o /Users/wen/Projects/include/bigint/BigUnsignedInABase.o maketest.hpp /Users/wen/Projects/include/bigint/BigInteger.hh /Users/wen/Projects/include/bigint/BigIntegerAlgorithms.hh /Users/wen/Projects/include/bigint/BigIntegerLibrary.hh /Users/wen/Projects/include/bigint/BigIntegerUtils.hh /Users/wen/Projects/include/bigint/BigUnsigned.hh /Users/wen/Projects/include/bigint/BigUnsignedInABase.hh /Users/wen/Projects/include/bigint/NumberlikeArray.hh Yoshi-Air:maketest wen$ make print maketest.cpp /Users/wen/Projects/include/bigint/BigInteger.cc /Users/wen/Projects/include/bigint/BigIntegerAlgorithms.cc /Users/wen/Projects/include/bigint/BigIntegerUtils.cc /Users/wen/Projects/include/bigint/BigUnsigned.cc /Users/wen/Projects/include/bigint/BigUnsignedInABase.cc maketest.o /Users/wen/Projects/include/bigint/BigInteger.o /Users/wen/Projects/include/bigint/BigIntegerAlgorithms.o /Users/wen/Projects/include/bigint/BigIntegerUtils.o /Users/wen/Projects/include/bigint/BigUnsigned.o /Users/wen/Projects/include/bigint/BigUnsignedInABase.o maketest.hpp /Users/wen/Projects/include/bigint/BigInteger.hh /Users/wen/Projects/include/bigint/BigIntegerAlgorithms.hh /Users/wen/Projects/include/bigint/BigIntegerLibrary.hh /Users/wen/Projects/include/bigint/BigIntegerUtils.hh /Users/wen/Projects/include/bigint/BigUnsigned.hh /Users/wen/Projects/include/bigint/BigUnsignedInABase.hh /Users/wen/Projects/include/bigint/NumberlikeArray.hh Compiles with: g++ -O2 -c -I/Users/wen/Projects/include/bigint </code></pre> <p>That proves that make knows what I wanted, but when it builds it's completely different: <code>c++</code> instead of <code>g++</code>?!</p> <h1>Update 2:</h1> <p><code>c++</code> invokes clang, installed on my system.</p> <h1>Solution by Alex B:</h1> <blockquote> <p>But from the compilation command line it looks like Make is trying to use the implicit suffix rule, and ignores your pattern rule.</p> </blockquote> <p>I tried <code>.SUFFIXES:</code> and yes, it reported a no-rule found. Thanks, I will go and consult the manual.</p>
    singulars
    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.
 

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