make-w32
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Pattern rules problem on cygwin ?


From: Maxime Boissonneault
Subject: Pattern rules problem on cygwin ?
Date: Fri, 03 Jul 2009 15:53:22 -0400
User-agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X; fr; rv:1.8.1.22) Gecko/20090605 Thunderbird/2.0.0.22 Mnenhy/0.7.6.0

Hello,

I have the included Makefile for a project. When compiling on Linux or Mac, everything works fine. When compiling on Windows with cygwin, with the same version of gnumake, some pattern rules don't work (see the attached error in the .jpg).

It seems like the compiler get a blank name for the .cpp file.

Do you see any non-portable syntax within lines 176 and 185 of the Makefile ?

Make is version 3.81 on each plateform.

Thanks,


--
--------
Put a ladder if there's a wall, don't be afraid to slip and fall, speak for  
yourself or they'll speak for you.
--------
Si l'on savait ce que l'on fait, on n'appellerait pas ça de la recherche. 
(Albert Einstein)
--------

Maxime Boissonneault
Étudiant chercheur au doctorat en physique
Président de l'AGLEBUS
--------------------------------------------
address@hidden
address@hidden
(819) 821-8000 #63043 (jour)
(819) 823-1913 (soirs et fins de semaine)




include Makefile.conf

# ############################
# LIST OF OBJECTS/EXES
# ############################
INCLUDEDIRS += -I./

MATRIX_DIR = matrix/
MATRIX_SOURCES = $(wildcard $(MATRIX_DIR)*.cpp)
MATRIX_OBJECTS = $(MATRIX_SOURCES:.cpp=.o)
MATRIX = libSQUACKMatrix.a
MATRIX_DEPEND = $(MATRIX_DIR)/MatrixExceptions.h matrix.h
OBJECTS += $(MATRIX_OBJECTS)
LIBRARIES += $(MATRIX)
DIRS += $(MATRIX_DIR)

SYSTEMFACTORIES_DIR = systemfactories/
SYSTEMFACTORIES_SOURCES = $(wildcard $(SYSTEMFACTORIES_DIR)*.cpp)
SYSTEMFACTORIES_OBJECTS = $(SYSTEMFACTORIES_SOURCES:.cpp=.o)
SYSTEMFACTORIES = libSQUACKSystemFactories.a
SYSTEMFACTORIES_DEPEND = generic_headers/lapack-blas.h
OBJECTS += $(SYSTEMFACTORIES_OBJECTS)
LIBRARIES += $(SYSTEMFACTORIES)
DIRS += $(SYSTEMFACTORIES_DIR)

UTILS_DIR = utilities/
UTILS_SOURCES = $(wildcard $(UTILS_DIR)*.cpp)
UTILS_OBJECTS = $(UTILS_SOURCES:.cpp=.o)
UTILITIES = libSQUACKUtilities.a
OBJECTS += $(UTILS_OBJECTS)
LIBRARIES += $(UTILITIES)
DIRS += $(UTILS_DIR)

GENERIC_HEADERS_DIR = generic_headers/
GENERIC_HEADERS = $(wildcard $(GENERIC_HEADERS_DIR)*.h)

GSL_OPENMP_DIR = gsl_openmp/

GOOGLETESTS_DIR = gtests/
GOOGLETESTS_SOURCES = $(wildcard $(GOOGLETESTS_DIR)test_*.cpp)
GOOGLETESTS_EXE = $(GOOGLETESTS_DIR)gtest_all$(EXE_EXTENSION)
EXES += $(GOOGLETESTS_EXE)
DIRS += $(GOOGLETESTS_DIR)

DEMO_DIR = demo/
DEMO_OBJECTS_SOURCES = $(wildcard $(DEMO_DIR)demo_obj_*.cpp)
DEMO_OBJECTS = $(DEMO_OBJECTS_SOURCES:.cpp=.o)
DEMO_EXES_SOURCES = $(wildcard $(DEMO_DIR)demo_exe_*.cpp)
DEMO_EXES = $(DEMO_EXES_SOURCES:.cpp=$(EXE_EXTENSION))
OBJECTS += $(DEMO_OBJECTS)
EXES += $(DEMO_EXES)
DIRS += $(DEMO_DIR)

USER_EXES_DIR = user_exes/
USER_EXES_OBJECTS_SOURCES = $(wildcard $(USER_EXES_DIR:/=/obj_*.cpp))
USER_EXES_OBJECTS = $(USER_EXES_OBJECTS_SOURCES:.cpp=.o)
USER_EXES_SOURCES = $(wildcard $(USER_EXES_DIR:/=/exe_*.cpp))
USER_EXES_EXES = $(USER_EXES_SOURCES:.cpp=$(EXE_EXTENSION))
EXES += $(USER_EXES_EXES)
OBJECTS += $(USER_EXES_OBJECTS)
DIRS += $(USER_EXES_DIR)

USER_EXES_SUBDIRS = $(subst $(USER_EXES_DIR) ,, $(sort $(dir $(wildcard 
$(USER_EXES_DIR)*/))))
USER_EXES_SUBDIRS_OBJECTS_SOURCES = $(wildcard 
$(USER_EXES_SUBDIRS:/=/obj_*.cpp))
USER_EXES_SUBDIRS_OBJECTS = $(USER_EXES_SUBDIRS_OBJECTS_SOURCES:.cpp=.o)
USER_EXES_SUBDIRS_SOURCES = $(wildcard $(USER_EXES_SUBDIRS:/=/exe_*.cpp))
USER_EXES_SUBDIRS_EXES = $(USER_EXES_SUBDIRS_SOURCES:.cpp=$(EXE_EXTENSION))
EXES += $(USER_EXES_SUBDIRS_EXES)
OBJECTS += $(USER_EXES_SUBDIRS_OBJECTS)
DIRS += $(USER_EXES_SUBDIRS)


GLOBAL_DEPEND = Makefile Makefile.conf $(GENERIC_HEADERS) 
gtests/system_test_complex$(EXE_EXTENSION) $(GENERIC_HEADERS_DIR)config.h
EXES += gtests/system_test_complex$(EXE_EXTENSION)

###################################
# Configuration
###################################
ifeq ($(OPENMP_ENABLED),1)
        CPPFLAGS += $(OPENMP_CPPFLAGS)
endif
ifeq ($(CBLAS_ENABLED),1)
        LIBS += $(CBLAS_LIBS)
        LIBDIRS += $(CBLAS_LIBDIR)
endif
ifeq ($(CLAPACK_ENABLED),1)
        LIBS += $(CLAPACK_LIBS)
        LIBDIRS += $(CLAPACK_LIBDIR)
endif
ifeq ($(GSL_ENABLED),1)
        LIBS += $(GSL_LIBS)
        LIBDIRS += $(GSL_LIBDIR)
        INCLUDEDIRS += $(GSL_INCLUDEDIR)
        ifeq ($(GSL_OPENMP_ENABLED),1)
                ifeq ($(OPENMP_ENABLED),1)
                        GSL_OPENMP_SOURCES = $(wildcard $(GSL_OPENMP_DIR)*.c)
                        GSL_OPENMP_OBJECTS = $(GSL_OPENMP_SOURCES:.c=.o)
                        OBJECTS += $(GSL_OPENMP_OBJECTS)
                endif
        endif
endif

libraries:: $(LIBRARIES)

echo::
        echo $(USER_EXES_DIR)
        echo $(USER_EXES_OBJECTS_SOURCES)
        echo $(USER_EXES_OBJECTS)
        echo $(USER_EXES_SOURCES)
        echo $(USER_EXES_EXES)
        echo $(USER_EXES_SUBDIRS)
        echo $(USER_EXES_SUBDIRS_OBJECTS_SOURCES)
        echo $(USER_EXES_SUBDIRS_OBJECTS)
        echo $(USER_EXES_SUBDIRS_SOURCES)
        echo $(USER_EXES_SUBDIRS_EXES)

all:: $(OBJECTS) $(LIBRARIES) $(EXES)
objects:: $(OBJECTS)
gtests/:: gtests
gtests:: $(GOOGLETESTS_EXE)
demo/:: demo
demo:: $(DEMO_EXES)
user_exes/:: user_exes
user_exes:: $(USER_EXES_EXES) $(USER_EXES_SUBDIRS_EXES)
utilities/:: utilities
utilities:: $(UTILS_OBJECTS)
gsl_openmp/:: gsl_openmp
gsl_openmp:: $(GSL_OPENMP_OBJECTS)
matrix/:: matrix
matrix:: $(MATRIX)
systemfactories/:: systemfactories
systemfactories:: $(SYSTEMFACTORIES)

generic_headers/config.h: Makefile Makefile.conf
        @echo Creating $*.h
        @if [ -f $*.h ]; then rm $*.h; fi
        @echo "#ifndef generic_headers_config_h" >> $*.h
        @echo " #define generic_headers_config_h" >> $*.h
ifeq ($(CBLAS_ENABLED),1)
        @echo " #define HAVE_CBLAS" >> $*.h     
endif
ifeq ($(CLAPACK_ENABLED),1)
        @echo " #define HAVE_CLAPACK" >> $*.h   
endif
ifeq ($(GSL_ENABLED),1)
        @echo " #define HAVE_GSL" >> $*.h       
endif
ifeq ($(GSL_OPENMP_ENABLED),1)
        @echo " #define USE_GSL_OMP" >> $*.h    
endif
        @echo "#endif" >> $*.h

$(MATRIX): $(MATRIX_OBJECTS) $(MATRIX_DEPEND) $(GLOBAL_DEPEND)
        ar rc $(MATRIX) $(MATRIX_OBJECTS)
        ranlib $(MATRIX)

$(SYSTEMFACTORIES): $(SYSTEMFACTORIES_OBJECTS) $(SYSTEMFACTORIES_DEPEND) 
$(GLOBAL_DEPEND)
        ar rc $(SYSTEMFACTORIES) $(SYSTEMFACTORIES_OBJECTS)
        ranlib $(SYSTEMFACTORIES)

$(UTILITIES): $(UTILS_OBJECTS) $(GLOBAL_DEPEND)
        ar rc $(UTILITIES) $(UTILS_OBJECTS)
        ranlib $(UTILITIES)

$(TESTS_EXES): %$(EXE_EXTENSION) : %.cpp $(LIBRARIES)
        $(CPP) $(DIRECTIVES) $(CPPFLAGS) $(INCLUDEDIRS) $(LIBDIRS) $*.cpp 
$(LIBRARIES) -o $*$(EXE_EXTENSION) $(LIBS) 

$(GOOGLETESTS_EXE): $(GOOGLETESTS_SOURCES) $(LIBRARIES) $(GLOBAL_DEPEND)
ifeq ($(GTEST_ENABLED),1)
        $(CPP) $(DIRECTIVES) $(CPPFLAGS) $(INCLUDEDIRS) $(GTEST_INCLUDEDIR) 
$(LIBDIRS) $(GTEST_LIBDIR) $(GOOGLETESTS_SOURCES) $(LIBRARIES) -o 
$(GOOGLETESTS_EXE) $(LIBS) -lgtest -lgtest_main
endif

$(DEMO_EXES): %$(EXE_EXTENSION) : %.cpp $(LIBRARIES) $(DEMO_OBJECTS) 
$(GSL_OPENMP_OBJECTS)
        $(CPP) $(DIRECTIVES) $(CPPFLAGS) $(INCLUDEDIRS) $(LIBDIRS) $*.cpp 
$(DEMO_OBJECTS) $(GSL_OPENMP_OBJECTS) $(LIBRARIES) -o $*$(EXE_EXTENSION) 
$(LIBS)  

$(USER_EXES_EXES): %$(EXE_EXTENSION) : %.cpp $(LIBRARIES) $(USER_EXES_OBJECTS) 
$(GSL_OPENMP_OBJECTS)
        $(CPP) $(DIRECTIVES) $(CPPFLAGS) $(INCLUDEDIRS) $(LIBDIRS) $*.cpp 
$(USER_EXES_OBJECTS) $(GSL_OPENMP_OBJECTS) $(LIBRARIES) -o $*$(EXE_EXTENSION) 
$(LIBS) 

# use secondary expansion to allow filtering of the prerequisites according to 
the target directory. This is to avoid compilation of unnecessary objects.
.SECONDEXPANSION:
$(USER_EXES_SUBDIRS_EXES): $$(filter $$(@D)%,$$(USER_EXES_SUBDIRS_SOURCES)) 
$(LIBRARIES) $$(filter $$(@D)%,$$(USER_EXES_SUBDIRS_OBJECTS)) 
$(GSL_OPENMP_OBJECTS) 
        $(CPP) $(DIRECTIVES) $(CPPFLAGS) $(INCLUDEDIRS) $(LIBDIRS) $*.cpp 
$(filter $(@D)%,$(USER_EXES_SUBDIRS_OBJECTS)) $(GSL_OPENMP_OBJECTS) 
$(LIBRARIES) -o $*$(EXE_EXTENSION) $(LIBS)

$(USER_EXES_SUBDIRS): $$(filter address@hidden,$$(USER_EXES_SUBDIRS_EXES))

clean:
        rm -rf $(EXES) $(EXES:$(EXE_EXTENSION)=$(EXE_EXTENSION).dSYM) 
$(OBJECTS) $(LIBRARIES) generic_headers/config.h

gtests/system_test_complex$(EXE_EXTENSION): gtests/system_test_complex.cpp
        @$(CPP) $(CPPFLAGS) gtests/system_test_complex.cpp -o 
gtests/system_test_complex$(EXE_EXTENSION)
        @echo "TESTING IF YOUR IMPLEMENTATION OF std::complex IS COMPATIBLE 
WITH SQUACK"
        @if ./gtests/system_test_complex$(EXE_EXTENSION); then echo "... OK"; 
else echo "... NOT COMPATIBLE. TRY USING A DIFFERENT COMPILER."; rm 
gtests/system_test_complex$(EXE_EXTENSION); exit 1; fi

%.o: %.cpp %.h $(GLOBAL_DEPEND)
        $(CPP) $(CPPFLAGS) $(DIRECTIVES) $(INCLUDEDIRS) -c $*.cpp -o $*.o

%.o: %.c $(GLOBAL_DEPEND)
        $(CPP) $(DIRECTIVES) $(CPPFLAGS) $(INCLUDEDIRS) -c $*.c -o $*.o


JPEG image


reply via email to

[Prev in Thread] Current Thread [Next in Thread]