Makefile: make portable, support static linking

We can happily stick to POSIX and the usual variable names,
with the following exceptions:
 - pkg-config(1) is used to find libraries and compile flags
 - the new "static" target uses non-standard compiler
   and linker flags, though it's not the default target

sdn is predestined for wild distribution,
even the dynamically linked libc is rather suboptimal.
This commit is contained in:
Přemysl Eric Janouch 2020-10-23 08:16:36 +02:00
parent c503954f44
commit 1318c4983f
Signed by: p
GPG Key ID: A0420B94F92B9493

View File

@ -1,12 +1,19 @@
.POSIX:
SHELL = /bin/sh
CXXFLAGS = -g -std=c++14 -Wall -Wextra -pedantic -static-libstdc++
all: sdn
%: %.cpp CMakeLists.txt
$(CXX) $(CXXFLAGS) $< -o $@ `pkg-config --libs --cflags ncursesw` -lacl \
`sed -ne 's/^project (\([^ )]*\).*/-DPROJECT_NAME="\1"/p' \
CXXFLAGS = -g -std=c++14 -Wall -Wextra -pedantic
CPPFLAGS = `sed -ne 's/^project (\([^ )]*\).*/-DPROJECT_NAME="\1"/p' \
-e 's/^set (version \([^ )]*\).*/-DPROJECT_VERSION="\1"/p' CMakeLists.txt`
sdn: sdn.cpp CMakeLists.txt
$(CXX) $(CXXFLAGS) $(CPPFLAGS) $< -o sdn \
-lacl `pkg-config --libs --cflags ncursesw`
static: sdn.cpp CMakeLists.txt
$(CXX) $(CXXFLAGS) $(CPPFLAGS) $< -o sdn \
-static-libstdc++ \
-Wl,--start-group,-Bstatic \
-lacl `pkg-config --static --libs --cflags ncursesw` \
-Wl,--end-group,-Bdynamic
clean:
rm -f sdn
.PHONY: all clean
.PHONY: static clean