====== Makefile ====== The CP2K Makefile automatically adopts to changes of the code base. To add a file to the source tree, just create it. The Makefile will automatically discover it, compile it, and link it. Consequently, files that do not belong into the CP2K libraries must end on an ignored suffix. The file discovery is based on a simple suffix naming convention: * **.F files** are Fortran files. They are compiled into an object. They should contain either a ''MODULE'' or a ''PROGRAM''. * **.f90 files** are included Fortran files. They are **not** compiled into an object. * **.c files** are C-files. They are compiled into an object. * **.cu files** are Cuda-C-files. They are compiled into an object using Nvidia's ''nvcc''. * **.h files** are C-header files. They are included by .c or .cu files. They are **not** compiled into an object. Furthermore, the code base is structured into [[packages]]. ===== Compiling Multiple Versions ===== The Makefile allows to compile multiple versions of all build targets in parallel: $ make ARCH=Linux-x86-64-gfortran VERSION="sopt sdbg popt pdbg" building only the main CP2K binary can be done as $ make ARCH=Linux-x86-64-gfortran VERSION="sopt sdbg popt pdbg" cp2k