[Top][All Lists]
[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:41:10 -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

[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Pattern rules problem on cygwin ?,
Maxime Boissonneault <=