summaryrefslogtreecommitdiff
path: root/schulung_tools/linking
diff options
context:
space:
mode:
Diffstat (limited to 'schulung_tools/linking')
-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)
{