summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Ogness <john.ogness@linutronix.de>2019-01-28 19:40:24 +0106
committerJohn Ogness <john.ogness@linutronix.de>2019-01-28 19:40:24 +0106
commit9a7ca2ce530c59abcdccb8a730c53c6098b3da3a (patch)
treeb0510cec8968191f5c12cf9088f25607881f73af
parentb990733af9d6a07c2130daeb5fd39c75f6804441 (diff)
linking/hello: fixup Makefiles
It is good to have Makefile and autotool versions for compare. But the Makefiles should not be intentially horrible. Clean them up to the level that we teach in the training. Signed-off-by: John Ogness <john.ogness@linutronix.de>
-rw-r--r--schulung_tools/linking/hello/Makefile43
-rw-r--r--schulung_tools/linking/hello/Makefile-lib37
-rw-r--r--schulung_tools/linking/hello/func.h7
-rw-r--r--schulung_tools/linking/hello/hello.c4
4 files changed, 65 insertions, 26 deletions
diff --git a/schulung_tools/linking/hello/Makefile b/schulung_tools/linking/hello/Makefile
index a5b4c26..c383eae 100644
--- a/schulung_tools/linking/hello/Makefile
+++ b/schulung_tools/linking/hello/Makefile
@@ -1,33 +1,30 @@
-hello: hello.c libfunc.so
- $(CROSS_COMPILE)gcc -g -ohello hello.c -L. -lfunc
+CC = $(CROSS_COMPILE)gcc
+LD = $(CROSS_COMPILE)gcc
-hello2: hello.c libfunc.a
- rm -f libfunc.so
- $(CROSS_COMPILE)gcc -g -ohello2 hello.c -L. -lfunc
+OBJS = hello.o
-libfunc.so: libfunc.so.0.0.1
- ln -s libfunc.so.0.0.1 libfunc.so
+CFLAGS = -g -Wall -Werror -I.
+LDFLAGS = -L. -lfunc
-libfunc.so.0.0.1: func1.o func2.o
- $(CROSS_COMPILE)gcc -shared -olibfunc.so.0.0.1 -Wl,-soname,libfunc.so.0 func1.o func2.o
+hello: $(OBJS) libfunc.so
+ $(CC) -ohello $(OBJS) $(LDFLAGS)
-libfunc.a: func1.o func2.o
- $(CROSS_COMPILE)ar cr libfunc.a func1.o func2.o
- $(CROSS_COMPILE)ranlib libfunc.a
+hello-static: $(OBJS) libfunc.a
+ rm -f libfunc.so
+ $(CC) -o$@ $(OBJS) $(LDFLAGS)
-func1.o: func1.c
- $(CROSS_COMPILE)gcc -fPIC -g -c func1.c
+%.c: %.o
+ $(CC) -c -o$@ $(CFLAGS) $<
-func2.o: func2.c
- $(CROSS_COMPILE)gcc -fPIC -g -c func2.c
+libfunc.%:
+ $(MAKE) -f Makefile-lib $@
-install_lib: libfunc.so.0.0.1
- echo "/opt/acme/lib" > /etc/ld.so.conf.d/acme.conf
- mkdir -p /opt/acme/lib
- cp libfunc.so.0.0.1 /opt/acme/lib
- ldconfig
+install: hello
+ $(MAKE) -f Makefile-lib install
+ cp $< /usr/bin/
clean:
- rm -f hello hello2 *.o lib*
+ rm -f hello hello-static $(OBJS)
+ $(MAKE) -f Makefile-lib $@
-.PHONY: clean
+.PHONY: install clean
diff --git a/schulung_tools/linking/hello/Makefile-lib b/schulung_tools/linking/hello/Makefile-lib
new file mode 100644
index 0000000..f3ac0de
--- /dev/null
+++ b/schulung_tools/linking/hello/Makefile-lib
@@ -0,0 +1,37 @@
+CC = $(CROSS_COMPILE)gcc
+LD = $(CROSS_COMPILE)gcc
+AR = $(CROSS_COMPILE)ar
+RANLIB = $(CROSS_COMPILE)ranlib
+
+REALNAME = libfunc.so.0.0.1
+SONAME = libfunc.so.0
+LINKERNAME = libfunc.so
+STATICNAME = libfunc.a
+OBJS = func1.o func2.o
+
+CFLAGS = -fPIC -g -Wall -Werror
+LDFLAGS = -shared -Wl,-soname,$(SONAME)
+
+$(LINKERNAME): $(REALNAME)
+ ln -sf $< $@
+
+$(REALNAME): $(OBJS)
+ $(CC) -o$@ $(LDFLAGS) $(OBJS)
+
+$(STATICNAME): $(OBJS)
+ $(AR) cr $@ $(OBJS)
+ $(RANLIB) $@
+
+%.o: %.c
+ $(CC) -c -o$@ $(CFLAGS) $<
+
+install: $(REALNAME)
+ echo "/opt/acme/lib" > /etc/ld.so.conf.d/acme.conf
+ mkdir -p /opt/acme/lib
+ cp $< /opt/acme/lib/
+ ldconfig
+
+clean:
+ rm -f $(OBJS) $(REALNAME) $(SONAME) $(LINKERNAME) $(STATICNAME)
+
+.PHONY: install clean
diff --git a/schulung_tools/linking/hello/func.h b/schulung_tools/linking/hello/func.h
new file mode 100644
index 0000000..cefd769
--- /dev/null
+++ b/schulung_tools/linking/hello/func.h
@@ -0,0 +1,7 @@
+#ifndef FUNC_H
+#define FUNC_H
+
+extern void func1(void);
+extern void func2(void);
+
+#endif /* FUNC_H */
diff --git a/schulung_tools/linking/hello/hello.c b/schulung_tools/linking/hello/hello.c
index 82b8d53..9b8d43a 100644
--- a/schulung_tools/linking/hello/hello.c
+++ b/schulung_tools/linking/hello/hello.c
@@ -1,7 +1,5 @@
#include <stdio.h>
-
-void func1(void);
-void func2(void);
+#include <func.h>
int main(void)
{