I would like to package my software (in C) into a .deb file, but I encounter some difficulties. It would be nice if someone could give me a hand.Let the source code be the following toy example:#include <stdio.h>#include <stdlib.h>#include <lbfgs.h>int main(void){    printf(liblbfgs will be used here!\n);    return 0;}In the above C program, liblbfgs library will be used. liblbfgs is available in repos. I have written the following simple Makefile:CXX=gccCFLAGS=-Wall -gLIBS=-lm -llbfgsOUTPUT=toypackage$(OUTPUT): $(OUTPUT).o    $(CXX) -o $(OUTPUT) $(LIBS) $(OUTPUT).o.PHONY: cleanclean:    rm -f *~ *.oIf I install the library via synaptic/apt-get or by manually compiling the available source code, and by building the above code, everything is alright. But it would be very desired to avoid installing liblbfgs first. For this reason, I want to package my software into a .deb file where I should define liblbfgs as a dependency.I create a folder, say toypackage_1.0/, where I store the source code and the Makefile. Then I compress this directory as tar czvf toypackage_1.0.orig.tar.gz toypackage-1.0/Then, I run dh_make as follows$ cd toypackage-1.0/$ dh_makeType of package: single binary, indep binary, multiple binary,     library, kernel module, kernel patch?  [s/i/m/l/k/n] s  Maintainer name  : geppetto  Email-Address    : geppetto@phi   Date             : Fri, 06 Jun 2014 16:25:22 +0300  Package Name     : toypackage  Version          : 1.0  License          : blank  Type of Package  : Single  Hit <enter> to confirm:   Skipping creating ../toypackage_1.0.orig.tar.gz because it already exists  Done. Please edit the files in the debian/ subdirectory now. You should also  check that the toypackage Makefiles install into $DESTDIR and not in / .$ debuild  dpkg-buildpackage -rfakeroot -D -us -uc  dpkg-buildpackage: source package toypackage  dpkg-buildpackage: source version 1.0-1  dpkg-buildpackage: source distribution unstable  dpkg-buildpackage: source changed by geppetto <geppetto@phi>  dpkg-source --before-build toypackage-1.0  dpkg-buildpackage: host architecture amd64  fakeroot debian/rules clean  dh clean dh_testdirdh_auto_clean  make[1]: Entering directory '/home/geppetto/LAB/Debian_Packaging/ToyPackage/toypackage-1.0'  rm -f *~ *.o  make[1]: Leaving directory '/home/geppetto/LAB/Debian_Packaging/ToyPackage/toypackage-1.0'dh_clean  dpkg-source -b toypackage-1.0  dpkg-source: info: using source format `3.0 (quilt)'  dpkg-source: info: building toypackage using existing ./toypackage_1.0.orig.tar.gz  dpkg-source: info: building toypackage in toypackage_1.0-1.debian.tar.xz  dpkg-source: info: building toypackage in toypackage_1.0-1.dsc  debian/rules build  dh build dh_testdirdh_auto_configuredh_auto_build  make[1]: Entering directory '/home/geppetto/LAB/Debian_Packaging/ToyPackage/toypackage-1.0'  cc -Wall -g -D_FORTIFY_SOURCE=2  -c -o toypackage.o toypackage.c  gcc -o toypackage -lm -llbfgs toypackage.o  make[1]: Leaving directory '/home/geppetto/LAB/Debian_Packaging/ToyPackage/toypackage-1.0'dh_auto_test  fakeroot debian/rules binary  dh binary dh_testrootdh_prepdh_auto_installdh_installdocsdh_installchangelogsdh_perldh_linkdh_compressdh_fixpermsdh_stripdh_makeshlibsdh_shlibdepsdh_installdebdh_gencontrol  dpkg-gencontrol: warning: Depends field of package toypackage: unknown substitution variable ${shlibs:Depends}dh_md5sumsdh_builddeb  dpkg-deb: building package `toypackage' in `../toypackage_1.0-1_amd64.deb'.  dpkg-genchanges  >../toypackage_1.0-1_amd64.changes  dpkg-genchanges: including full source code in upload  dpkg-source --after-build toypackage-1.0  dpkg-buildpackage: full upload (original source is included)  Now running lintian...  E: toypackage changes: changed-by-address-malformed geppetto <geppetto@phi>  W: toypackage source: dh-make-template-in-source debian/init.d.ex  W: toypackage source: dh-make-template-in-source debian/manpage.1.ex  W: toypackage source: dh-make-template-in-source debian/manpage.sgml.ex  W: toypackage source: dh-make-template-in-source debian/manpage.xml.ex  W: toypackage source: dh-make-template-in-source debian/menu.ex  W: toypackage source: dh-make-template-in-source debian/postinst.ex  W: toypackage source: dh-make-template-in-source debian/postrm.ex  W: toypackage source: dh-make-template-in-source debian/preinst.ex  W: toypackage source: dh-make-template-in-source debian/prerm.ex  W: toypackage source: dh-make-template-in-source debian/toypackage.cron.d.ex  W: toypackage source: dh-make-template-in-source debian/toypackage.default.ex  W: toypackage source: dh-make-template-in-source debian/toypackage.doc-base.EX  W: toypackage source: dh-make-template-in-source debian/watch.ex  W: toypackage source: package-needs-versioned-debhelper-build-depends 9  E: toypackage source: maintainer-address-malformed geppetto <geppetto@phi>  W: toypackage source: superfluous-clutter-in-homepage <insert the upstream URL, if relevant>  W: toypackage source: bad-homepage <insert the upstream URL, if relevant>  W: toypackage source: out-of-date-standards-version 3.9.4 (current is 3.9.5)  W: toypackage: wrong-bug-number-in-closes l3:#nnnn  E: toypackage: debian-changelog-file-contains-invalid-email-address geppetto@phi  W: toypackage: new-package-should-close-itp-bug  E: toypackage: changelog-is-dh_make-template  E: toypackage: helper-templates-in-copyright  W: toypackage: copyright-has-url-from-dh_make-boilerplate  E: toypackage: copyright-contains-dh_make-todo-boilerplate  W: toypackage: readme-debian-contains-debmake-template  E: toypackage: description-is-dh_make-template  E: toypackage: maintainer-address-malformed geppetto <geppetto@phi>  E: toypackage: section-is-dh_make-template  W: toypackage: superfluous-clutter-in-homepage <insert the upstream URL, if relevant>  W: toypackage: bad-homepage <insert the upstream URL, if relevant>  Finished running lintian.  Now signing changes and any dsc files...  signfile toypackage_1.0-1.dsc geppetto <geppetto@phi>  gpg: skipped geppetto <geppetto@phi>: secret key not available  gpg: /tmp/debsign.wQjBHrJP/toypackage_1.0-1.dsc: clearsign failed: secret key not available  debsign: gpg error occurred!  Aborting....  debuild: fatal error at line 1283:  running debsign failedIt seems a bit erroneous, but if I $ cd ..$ sudo dpkg -i toypackage_1.0-1_amd64.deb[sudo] password for geppetto: Selecting previously unselected package toypackage.(Reading database ... 426247 files and directories currently installed.)Preparing to unpack toypackage_1.0-1_amd64.deb ...Unpacking toypackage (1.0-1) ...Setting up toypackage (1.0-1) ...$ cd ./toypackage-1.0/$ cd ./toypackageliblbfgs will be used here!then I see that the code has been built correctly, as I have already installed liblbfgs via apt-get.Here are my questions:What if I have not installed liblbfgs before? What should I do to be able to build my code correctly?What would be a meaningful Makefile for my purposes? Could you suggest me how to change it using $DESTDIR$ in order the binaries are stored to /usr/bin/?
Debian packaging with dependency (from the scratch)
debian;make;packaging
What if I have not installed liblbfgs before? What should I do to be able to build my code correctly?In order for build tools to notice that kind of dependencies, you need to specify it in the Build-Depends field of the debian/control file.What would be a meaningful Makefile for my purposes? Could you suggest me how to change it using $DESTDIR$ in order the binaries are stored to /usr/bin/?Your Makefile needs to have a install target, and that target needs to respect  $DESTDIR (and also $PREFIX if you want to support things like FreeBSD). A good install target would look like:PREFIX?=/usrDESTDIR?=/install:    install -m 755 $(OUTPUT) $(DESTDIR)/$(PREFIX)/bin/$(OUTPUT)See the destdir section of the very useful new maintainer guide.