makefile-guidelines: some incremental improvements - bitreich-style - Style guide for programmers. HTML git clone git://bitreich.org/bitreich-style DIR Log DIR Files DIR Refs DIR Tags DIR README DIR LICENSE --- DIR commit 60d0637f5edd99ec9ee1175d37a3f7b03db3d318 DIR parent 040830cabbba670cfbac39d214fe274d7c10b88d HTML Author: Hiltjo Posthuma <hiltjo@codemadness.org> Date: Wed, 10 Jun 2020 14:46:27 +0200 makefile-guidelines: some incremental improvements * Fix the direct link to the POSIX make link (it was a HTML frame). * Add a note to make porters-life easier. #porterlivesmatter * Fix ar rc to ar -rc (quinq). * Also copy the LICENSE documentation: cp ${DOC}. * Add some references. * Some line-wrapping fixes. Diffstat: M c/makefile-guideline.txt | 42 ++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 15 deletions(-) --- DIR diff --git a/c/makefile-guideline.txt b/c/makefile-guideline.txt @@ -33,6 +33,14 @@ Do not use GNUisms in Makefiles. Testing with different make implementations like BSD make which mostly respect POSIX is very useful. Use POSIX Makefile rules: https://pubs.opengroup.org/onlinepubs/9699919799/utilities/make.html +Trying to place yourself into the shoes of a package maintainer / porter. This +is helpful to make sure the package is easy to maintain: + +* https://www.openbsd.org/faq/ports/ +* https://www.netbsd.org/docs/pkgsrc/ +* https://www.freebsd.org/doc/en_US.ISO8859-1/books/porters-handbook/book.html +* https://wiki.voidlinux.org/A_General_Introduction_To_Package_Creation + Variables --------- @@ -54,13 +62,19 @@ It is recommended to respect the following commonly-used variables. Specifying compiler and linker flags: * $CC, $CFLAGS, $LDFLAGS, $CPPFLAGS: make sure to respect the default set flags - as specified in POSIX: https://pubs.opengroup.org/onlinepubs/9699919799/ - under the section "Default rules". This make it easier for the ports build system - to use the set variables and not having to patch the Makefile in some way. -* $CFLAGS: do not hard-code optimization flags like (-O2) or diagnostic flags such as - -Wall, -Wextra, -pedantic. Of course do not specify unportable compiler flags. -* $LDFLAGS: do not hard-code linker flags like -s (symbol stripping) or -g, -static - or such flags. + as specified in POSIX: + + https://pubs.opengroup.org/onlinepubs/9699919799/utilities/make.html under the + section "Default rules". This make it easier for the ports build system to use + the set variables and not having to patch the Makefile in some way. + +* $CFLAGS: do not hard-code optimization flags like (-O2) or diagnostic flags + such as -Wall, -Wextra, -pedantic. Of course do not specify unportable compiler + flags. + +* $LDFLAGS: do not hard-code linker flags like -s (symbol stripping) or -g, + -static or such flags. + * Libraries: using separate variables for compile and link per library (for example libpng, libjpeg) can be useful for building in ports. For example a variable LIBPNG_CFLAGS, LIBPNG_LDFLAGS for the header files or @@ -190,7 +204,7 @@ Compiling, use the system specified CFLAGS and CPPFLAGS. 40 41 ${LIBJSON}: ${LIBJSONOBJ} - 42 ${AR} rc $@ $? + 42 ${AR} -rc $@ $? 43 ${RANLIB} $@ 44 @@ -235,7 +249,7 @@ busy as a process. 61 for f in ${BIN}; do chmod 755 "${DESTDIR}${PREFIX}/bin/$$f"; done 62 # installing example files. 63 mkdir -p "${DESTDIR}${DOCPREFIX}" - 64 cp -f README "${DESTDIR}${DOCPREFIX}" + 64 cp -f ${DOC} "${DESTDIR}${DOCPREFIX}" 65 # installing manual pages for general commands: section 1. 66 mkdir -p "${DESTDIR}${MANPREFIX}/man1" 67 cp -f ${MAN1} "${DESTDIR}${MANPREFIX}/man1" @@ -261,12 +275,10 @@ rmdir returns an error code then that is ok and make still proceeds. 79 .PHONY: all clean dist install uninstall +References +---------- - -TODO - -References: - https://www.gnu.org/prep/standards/standards.html#DESTDIR - https://nullprogram.com/blog/2017/08/20/ - -- https://www.openbsd.org/faq/ports/ +- https://pubs.opengroup.org/onlinepubs/9699919799/utilities/make.html +- https://pubs.opengroup.org/onlinepubs/9699919799/