#
# File : Makefile
# ( Makefile for GNU 'make' utility )
#
# Description : Makefile for compiling CImg-based code on Unix.
# This file is a part of the CImg Library project.
# ( http://cimg.sourceforge.net )
#
# Copyright : David Tschumperle
# ( http://tschumperle.users.greyc.fr/ )
#
# License : CeCILL v2.0
# ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html )
#
# This software is governed by the CeCILL license under French law and
# abiding by the rules of distribution of free software. You can use,
# modify and/ or redistribute the software under the terms of the CeCILL
# license as circulated by CEA, CNRS and INRIA at the following URL
# "http://www.cecill.info".
#
# As a counterpart to the access to the source code and rights to copy,
# modify and redistribute granted by the license, users are provided only
# with a limited warranty and the software's author, the holder of the
# economic rights, and the successive licensors have only limited
# liability.
#
# In this respect, the user's attention is drawn to the risks associated
# with loading, using, modifying and/or developing or reproducing the
# software by the user in light of its specific status of free software,
# that may mean that it is complicated to manipulate, and that also
# therefore means that it is reserved for developers and experienced
# professionals having in-depth computer knowledge. Users are therefore
# encouraged to load and test the software's suitability as regards their
# requirements in conditions enabling the security of their systems and/or
# data to be ensured and, more generally, to use and operate it in the
# same conditions as regards security.
#
# The fact that you are presently reading this means that you have had
# knowledge of the CeCILL license and that you accept its terms.
#
#-------------------------------------------------------
# Define the list of files to be compiled
# (name of the source files without the .cpp extension)
#-------------------------------------------------------
# Files which do not necessarily require external libraries to run.
CIMG_FILES = CImg_demo \
captcha \
curve_editor2d \
dtmri_view3d \
edge_explorer2d \
fade_images \
gaussian_fit1d \
generate_loop_macros \
hough_transform2d \
image_registration2d \
image2ascii \
image_surface3d \
jawbreaker \
mcf_levelsets2d \
mcf_levelsets3d \
odykill \
pde_heatflow2d \
pde_TschumperleDeriche2d \
plotter1d \
radon_transform2d \
scene3d \
spherical_function3d \
tetris \
tron \
tutorial \
wavelet_atrous \
use_chlpca \
use_draw_gradient \
use_nlmeans \
use_patchmatch \
use_skeleton \
use_RGBclass \
# Files which requires external libraries to run.
CIMG_EXTRA_FILES = use_tiff_stream use_jpeg_buffer
#---------------------------------
# Set correct variables and paths
#---------------------------------
CIMG_VERSION = 1.6.0_rolling141127
X11PATH = /usr/X11R6
CC = g++
EXEPFX =
CCVER = $(CC)
ifeq ($(CC),g++)
CCVER = `$(CC) -v 2>&1 | tail -n 1`
endif
ifeq ($(CC),clang++)
CCVER = `$(CC) -v 2>&1 | head -n 1`
endif
ifeq ($(CC),icpc)
CCVER = "icpc \( `$(CC) -v 2>&1`\)"
CFLAGS = -I..
LIBS =
else
CFLAGS = -I.. -Wall -W
LIBS = -lm
endif
#--------------------------------------------------
# Set compilation flags allowing to customize CImg
#--------------------------------------------------
# Flags to enable strict code standards
ifeq ($(CC),icpc)
CIMG_ANSI_CFLAGS = -std=c++11 -ansi
else
CIMG_ANSI_CFLAGS = -std=c++11 -ansi -pedantic
endif
# Flags to enable code debugging.
CIMG_DEBUG_CFLAGS = -Dcimg_verbosity=3 -Dcimg_strict_warnings -g
# Flags to enable color output messages.
# (requires a VT100 compatible terminal)
CIMG_VT100_CFLAGS = -Dcimg_use_vt100
# Flags to enable code optimization by the compiler.
ifeq ($(CC),g++)
CIMG_OPT_CFLAGS = -O2 -fno-ipa-sra -mtune=generic
else
ifeq ($(CC),icpc)
CIMG_OPT_CFLAGS = -fast
else
CIMG_OPT_CFLAGS = -O2
endif
endif
# Flags to enable OpenMP support.
ifeq ($(CC),icpc)
CIMG_OPENMP_CFLAGS = #-Dcimg_use_openmp -openmp -i-static # -> Seems to bug the compiler!
else
CIMG_OPENMP_CFLAGS = -Dcimg_use_openmp -fopenmp
endif
# Flags to enable OpenCV support.
CIMG_OPENCV_CFLAGS = -Dcimg_use_opencv -I/usr/include/opencv
CIMG_OPENCV_LIBS = -lopencv_core -lopencv_highgui
#CIMG_OPENCV_LIBS = -lcv -lhighgui #-> Use this for OpenCV < 2.2.0
# Flags used to disable display capablities of CImg
CIMG_NODISPLAY_CFLAGS = -Dcimg_display=0
# Flags to enable the use of the X11 library.
# (X11 is used by CImg to handle display windows)
# !!! For 64bits systems : replace -L$(X11PATH)/lib by -L$(X11PATH)/lib64 !!!
CIMG_X11_CFLAGS = -I$(X11PATH)/include
CIMG_X11_LIBS = -L$(X11PATH)/lib -lpthread -lX11
# Flags to enable fast image display, using the XSHM library (when using X11).
# !!! Seems to randomly crash when used on MacOSX and 64bits systems, so use it only when necessary !!!
CIMG_XSHM_CFLAGS = # -Dcimg_use_xshm
CIMG_XSHM_LIBS = # -lXext
# Flags to enable GDI32 display (Windows native).
CIMG_GDI32_CFLAGS = -mwindows
CIMG_GDI32_LIBS = -lgdi32
# Flags to enable screen mode switching, using the XRandr library (when using X11).
# ( http://www.x.org/wiki/Projects/XRandR )
# !!! Not supported by the X11 server on MacOSX, so do not use it on MacOSX !!!
CIMG_XRANDR_CFLAGS = -Dcimg_use_xrandr
CIMG_XRANDR_LIBS = -lXrandr
# Flags to enable native support for PNG image files, using the PNG library.
# ( http://www.libpng.org/ )
CIMG_PNG_CFLAGS = -Dcimg_use_png
CIMG_PNG_LIBS = -lpng -lz
# Flags to enable native support for JPEG image files, using the JPEG library.
# ( http://www.ijg.org/ )
CIMG_JPEG_CFLAGS = -Dcimg_use_jpeg
CIMG_JPEG_LIBS = -ljpeg
# Flags to enable native support for TIFF image files, using the TIFF library.
# ( http://www.libtiff.org/ )
CIMG_TIFF_CFLAGS = -Dcimg_use_tiff
CIMG_TIFF_LIBS = -ltiff
# Flags to enable native support for MINC2 image files, using the MINC2 library.
# ( http://en.wikibooks.org/wiki/MINC/Reference/MINC2.0_Users_Guide )
CIMG_MINC2_CFLAGS = -Dcimg_use_minc2 -I${HOME}/local/include
CIMG_MINC2_LIBS = -lminc_io -lvolume_io2 -lminc2 -lnetcdf -lhdf5 -lz -L${HOME}/local/lib
# Flags to enable native support for EXR image files, using the OpenEXR library.
# ( http://www.openexr.com/ )
CIMG_EXR_CFLAGS = -Dcimg_use_openexr -I/usr/include/OpenEXR
CIMG_EXR_LIBS = -lIlmImf -lHalf
# Flags to enable native support for various video files, using the FFMPEG library.
# ( http://www.ffmpeg.org/ )
CIMG_FFMPEG_CFLAGS = -Dcimg_use_ffmpeg -D__STDC_CONSTANT_MACROS -I/usr/include/libavcodec -I/usr/include/libavformat -I/usr/include/libswscale -I/usr/include/ffmpeg
CIMG_FFMPEG_LIBS = -lavcodec -lavformat -lswscale
# Flags to enable native support for compressed .cimgz files, using the Zlib library.
# ( http://www.zlib.net/ )
CIMG_ZLIB_CFLAGS = -Dcimg_use_zlib
CIMG_ZLIB_LIBS = -lz
# Flags to enable native support of most classical image file formats, using the Magick++ library.
# ( http://www.imagemagick.org/Magick++/ )
CIMG_MAGICK_CFLAGS = -Dcimg_use_magick `Magick++-config --cppflags` `Magick++-config --cxxflags`
CIMG_MAGICK_LIBS = `Magick++-config --ldflags` `Magick++-config --libs`
# Flags to enable faster Discrete Fourier Transform computation, using the FFTW3 library
# ( http://www.fftw.org/ )
CIMG_FFTW3_CFLAGS = -Dcimg_use_fftw3
ifeq ($(OSTYPE),msys)
CIMG_FFTW3_LIBS = -lfftw3-3
else
CIMG_FFTW3_LIBS = -lfftw3 -lfftw3_threads
endif
# Flags to enable the use of LAPACK routines for matrix computation
# ( http://www.netlib.org/lapack/ )
CIMG_LAPACK_CFLAGS = -Dcimg_use_lapack
CIMG_LAPACK_LIBS = -lblas -lg2c -llapack
# Flags to enable the use of the Board library
# ( http://libboard.sourceforge.net/ )
CIMG_BOARD_CFLAGS = -Dcimg_use_board -I/usr/include/board
CIMG_BOARD_LIBS = -lboard
# Flags to compile on Sun Solaris
CIMG_SOLARIS_LIBS = -R$(X11PATH)/lib -lrt -lnsl -lsocket
# Flags to compile GIMP plug-ins.
ifeq ($(MSYSTEM),MINGW32)
CIMG_GIMP_CFLAGS = -mwindows
endif
#-------------------------
# Define Makefile entries
#-------------------------
.cpp:
@echo
@echo "** Compiling '$* ($(CIMG_VERSION))' with '$(CCVER)'"
@echo
$(CC) -o $(EXEPFX)$* $< $(CFLAGS) $(CONF_CFLAGS) $(LIBS) $(CONF_LIBS)
ifeq ($(STRIP_EXE),true)
ifeq ($(MSYSTEM),MINGW32)
strip $(EXEPFX)$*.exe
else
strip $(EXEPFX)$*
endif
endif
menu:
@echo
@echo "CImg Library $(CIMG_VERSION) : Examples"
@echo "-----------------------------"
@echo " > linux : Linux/BSD target, X11 display, optimizations disabled."
@echo " > dlinux : Linux/BSD target, X11 display, debug mode."
@echo " > olinux : Linux/BSD target, X11 display, optimizations enabled."
@echo " > mlinux : Linus/BSD target, no display, minimal features, optimizations enabled."
@echo " > Mlinux : Linux/BSD target, X11 display, maximal features, optimizations enabled."
@echo
@echo " > solaris : Sun Solaris target, X11 display, optimizations disabled."
@echo " > dsolaris : Sun Solaris target, X11 display, debug mode."
@echo " > osolaris : Sun Solaris target, X11 display, optimizations enabled."
@echo " > msolaris : Sun Solaris target, no display, minimal features, optimizations enabled."
@echo " > Msolaris : Sun Solaris target, X11 display, maximal features, optimizations enabled."
@echo
@echo " > macosx : MacOSX target, X11 display, optimizations disabled."
@echo " > dmacosx : MacOSX target, X11 display, debug mode."
@echo " > omacosx : MacOSX target, X11 display, optimizations enabled."
@echo " > mmacosx : MacOSX target, no display, minimal features, optimizations enabled."
@echo " > Mmacosx : MacOSX target, X11 display, maximal features, optimizations enabled."
@echo
@echo " > windows : Windows target, GDI32 display, optimizations disabled."
@echo " > dwindows : Windows target, GDI32 display, debug mode."
@echo " > owindows : Windows target, GDI32 display, optimizations enabled."
@echo " > mwindows : Windows target, no display, minimal features, optimizations enabled."
@echo " > Mwindows : Windows target, GDI32 display, maximal features, optimizations enabled."
@echo
@echo " > clean : Clean generated files."
@echo
@echo "Choose your option :"
@read CHOICE; echo; $(MAKE) $$CHOICE; echo; echo "> Next time, you can bypass the menu by typing directly 'make $$CHOICE'"; echo;
all: $(CIMG_FILES)
clean:
rm -rf *.exe *.o *~ \#* $(CIMG_FILES) $(CIMG_EXTRA_FILES)
ifneq ($(EXEPFX),)
rm -f $(EXEPFX)*
endif
# Custom user-defined target
custom:
@$(MAKE) \
"CONF_CFLAGS = \
$(CIMG_ANSI_CFLAGS) \
$(CIMG_VT100_CFLAGS) \
$(CIMG_TIFF_CFLAGS) \
$(CIMG_X11_CFLAGS) \
$(CIMG_XSHM_CFLAGS)" \
"CONF_LIBS = \
$(CIMG_X11_LIBS) \
$(CIMG_TIFF_LIBS) \
$(CIMG_XSHM_LIBS)" \
all $(CIMG_EXTRA_FILES)
# Linux/BSD/Mac OSX targets, with X11 display.
linux:
@$(MAKE) \
"CONF_CFLAGS = \
$(CIMG_ANSI_CFLAGS) \
$(CIMG_VT100_CFLAGS) \
$(CIMG_X11_CFLAGS) \
$(CIMG_XSHM_CFLAGS)" \
"CONF_LIBS = \
$(CIMG_X11_LIBS) \
$(CIMG_XSHM_LIBS)" \
all
dlinux:
@$(MAKE) \
"CONF_CFLAGS = \
$(CIMG_ANSI_CFLAGS) \
$(CIMG_DEBUG_CFLAGS) \
$(CIMG_VT100_CFLAGS) \
$(CIMG_X11_CFLAGS) \
$(CIMG_XSHM_CFLAGS)" \
"CONF_LIBS = \
$(CIMG_X11_LIBS) \
$(CIMG_XSHM_LIBS)" \
all
olinux:
@$(MAKE) \
"CONF_CFLAGS = \
$(CIMG_ANSI_CFLAGS) \
$(CIMG_OPT_CFLAGS) \
$(CIMG_OPENMP_CFLAGS) \
$(CIMG_VT100_CFLAGS) \
$(CIMG_X11_CFLAGS) \
$(CIMG_XSHM_CFLAGS)" \
"CONF_LIBS = \
$(CIMG_X11_LIBS) \
$(CIMG_XSHM_LIBS)" \
"STRIP_EXE=true" \
all
mlinux:
@$(MAKE) \
"CONF_CFLAGS = \
$(CIMG_ANSI_CFLAGS) \
$(CIMG_NODISPLAY_CFLAGS) \
$(CIMG_OPT_CFLAGS)" \
"STRIP_EXE=true" \
all
Mlinux:
@$(MAKE) \
"CONF_CFLAGS = \
$(CIMG_OPT_CFLAGS) \
$(CIMG_VT100_CFLAGS) \
$(CIMG_X11_CFLAGS) \
$(CIMG_XSHM_CFLAGS) \
$(CIMG_XRANDR_CFLAGS) \
$(CIMG_TIFF_CFLAGS) \
$(CIMG_EXR_CFLAGS) \
$(CIMG_PNG_CFLAGS) \
$(CIMG_JPEG_CFLAGS) \
$(CIMG_ZLIB_CFLAGS) \
$(CIMG_OPENCV_CFLAGS) \
$(CIMG_MAGICK_CFLAGS) \
$(CIMG_FFTW3_CFLAGS)" \
"CONF_LIBS = \
$(CIMG_X11_LIBS) \
$(CIMG_XSHM_LIBS) \
$(CIMG_XRANDR_LIBS) \
$(CIMG_TIFF_LIBS) -ltiffxx \
$(CIMG_EXR_LIBS) \
$(CIMG_PNG_LIBS) \
$(CIMG_JPEG_LIBS) \
$(CIMG_ZLIB_LIBS) \
$(CIMG_OPENCV_LIBS) \
$(CIMG_MAGICK_LIBS) \
$(CIMG_FFTW3_LIBS)" \
"STRIP_EXE=true" \
all $(CIMG_EXTRA_FILES)
# Sun Solaris targets, with X11 display.
solaris:
@$(MAKE) \
"CONF_CFLAGS = \
$(CIMG_ANSI_CFLAGS) \
$(CIMG_VT100_CFLAGS) \
$(CIMG_X11_CFLAGS) \
$(CIMG_XSHM_CFLAGS)" \
"CONF_LIBS = \
$(CIMG_SOLARIS_LIBS) \
$(CIMG_X11_LIBS) \
$(CIMG_XSHM_LIBS)" \
all
dsolaris:
@$(MAKE) \
"CONF_CFLAGS = \
$(CIMG_ANSI_CFLAGS) \
$(CIMG_DEBUG_CFLAGS) \
$(CIMG_VT100_CFLAGS) \
$(CIMG_X11_CFLAGS) \
$(CIMG_XSHM_CFLAGS)" \
"CONF_LIBS = \
$(CIMG_SOLARIS_LIBS) \
$(CIMG_X11_LIBS) \
$(CIMG_XSHM_LIBS)" \
all
osolaris:
@$(MAKE) \
"CONF_CFLAGS = \
$(CIMG_ANSI_CFLAGS) \
$(CIMG_OPT_CFLAGS) \
$(CIMG_VT100_CFLAGS) \
$(CIMG_X11_CFLAGS) \
$(CIMG_XSHM_CFLAGS)" \
"CONF_LIBS = \
$(CIMG_SOLARIS_LIBS) \
$(CIMG_X11_LIBS) \
$(CIMG_XSHM_LIBS)" \
"STRIP_EXE=true" \
all
msolaris:
@$(MAKE) \
"CONF_CFLAGS = \
$(CIMG_ANSI_CFLAGS) \
$(CIMG_NODISPLAY_CFLAGS) \
$(CIMG_OPT_CFLAGS)" \
"STRIP_EXE=true" \
all
Msolaris:
@$(MAKE) \
"CONF_CFLAGS = \
$(CIMG_OPT_CFLAGS) \
$(CIMG_VT100_CFLAGS) \
$(CIMG_X11_CFLAGS) \
$(CIMG_XSHM_CFLAGS) \
$(CIMG_XRANDR_CFLAGS) \
$(CIMG_TIFF_CFLAGS) \
$(CIMG_MINC2_CFLAGS) \
$(CIMG_EXR_CFLAGS) \
$(CIMG_PNG_CFLAGS) \
$(CIMG_JPEG_CFLAGS) \
$(CIMG_ZLIB_CFLAGS) \
$(CIMG_OPENCV_CFLAGS) \
$(CIMG_MAGICK_CFLAGS) \
$(CIMG_FFTW3_CFLAGS)" \
"CONF_LIBS = \
$(CIMG_SOLARIS_LIBS) \
$(CIMG_X11_LIBS) \
$(CIMG_XSHM_LIBS) \
$(CIMG_XRANDR_LIBS) \
$(CIMG_TIFF_LIBS) \
$(CIMG_MINC2_LIBS) \
$(CIMG_EXR_LIBS) \
$(CIMG_PNG_LIBS) \
$(CIMG_JPEG_LIBS) \
$(CIMG_ZLIB_LIBS) \
$(CIMG_OPENCV_LIBS) \
$(CIMG_MAGICK_LIBS) \
$(CIMG_FFTW3_LIBS)" \
"STRIP_EXE=true" \
all $(CIMG_EXTRA_FILES)
# MacOsX targets, with X11 display.
macosx:
@$(MAKE) \
"CONF_CFLAGS = \
$(CIMG_ANSI_CFLAGS) \
$(CIMG_VT100_CFLAGS) \
$(CIMG_X11_CFLAGS)" \
"CONF_LIBS = \
$(CIMG_X11_LIBS)" \
all
dmacosx:
@$(MAKE) \
"CONF_CFLAGS = \
$(CIMG_ANSI_CFLAGS) \
$(CIMG_DEBUG_CFLAGS) \
$(CIMG_VT100_CFLAGS) \
$(CIMG_X11_CFLAGS)" \
"CONF_LIBS = \
$(CIMG_X11_LIBS)" \
all
omacosx:
@$(MAKE) \
"CONF_CFLAGS = \
$(CIMG_ANSI_CFLAGS) \
$(CIMG_OPT_CFLAGS) \
$(CIMG_VT100_CFLAGS) \
$(CIMG_X11_CFLAGS)" \
"CONF_LIBS = \
$(CIMG_X11_LIBS)" \
all
mmacosx:
@$(MAKE) \
"CONF_CFLAGS = \
$(CIMG_ANSI_CFLAGS) \
$(CIMG_NODISPLAY_CFLAGS) \
$(CIMG_OPT_CFLAGS)" \
all
Mmacosx:
@$(MAKE) \
"CONF_CFLAGS = \
$(CIMG_OPT_CFLAGS) \
$(CIMG_VT100_CFLAGS) \
$(CIMG_X11_CFLAGS) \
$(CIMG_TIFF_CFLAGS) \
$(CIMG_MINC2_CFLAGS) \
$(CIMG_EXR_CFLAGS) \
$(CIMG_PNG_CFLAGS) \
$(CIMG_JPEG_CFLAGS) \
$(CIMG_ZLIB_CFLAGS) \
$(CIMG_OPENCV_CFLAGS) \
$(CIMG_MAGICK_CFLAGS) \
$(CIMG_FFTW3_CFLAGS)" \
"CONF_LIBS = \
$(CIMG_X11_LIBS) \
$(CIMG_TIFF_LIBS) \
$(CIMG_MINC2_LIBS) \
$(CIMG_EXR_LIBS) \
$(CIMG_PNG_LIBS) \
$(CIMG_JPEG_LIBS) \
$(CIMG_ZLIB_LIBS) \
$(CIMG_OPENCV_LIBS) \
$(CIMG_MAGICK_LIBS) \
$(CIMG_FFTW3_LIBS)" \
all $(CIMG_EXTRA_FILES)
# Windows targets, with GDI32 display.
windows:
@$(MAKE) \
"CONF_CFLAGS = " \
"CONF_LIBS = \
$(CIMG_GDI32_LIBS)" \
all
dwindows:
@$(MAKE) \
"CONF_CFLAGS = \
$(CIMG_DEBUG_CFLAGS)" \
"CONF_LIBS = \
$(CIMG_GDI32_LIBS)" \
all
owindows:
@$(MAKE) \
"CONF_CFLAGS = \
$(CIMG_OPT_CFLAGS)" \
"CONF_LIBS = \
$(CIMG_GDI32_LIBS)" \
"STRIP_EXE=true" \
all
mwindows:
@$(MAKE) \
"CONF_CFLAGS = \
$(CIMG_NODISPLAY_CFLAGS) \
$(CIMG_OPT_CFLAGS)" \
"STRIP_EXE=true" \
all
Mwindows:
@$(MAKE) \
"CONF_CFLAGS = \
$(CIMG_OPT_CFLAGS) \
$(CIMG_TIFF_CFLAGS) \
$(CIMG_PNG_CFLAGS) \
$(CIMG_JPEG_CFLAGS) \
$(CIMG_ZLIB_CFLAGS) \
$(CIMG_OPENCV_CFLAGS) \
$(CIMG_FFTW3_CFLAGS)" \
"CONF_LIBS = \
$(CIMG_GDI32_LIBS) \
$(CIMG_TIFF_LIBS) \
$(CIMG_PNG_LIBS) \
$(CIMG_JPEG_LIBS) \
$(CIMG_ZLIB_LIBS) \
$(CIMG_OPENCV_LIBS) \
$(CIMG_FFTW3_LIBS)" \
"STRIP_EXE=true" \
all $(CIMG_EXTRA_FILES)
#-----------------
# End of makefile
#-----------------