On 18/12/09 14:04, David Aldrich wrote:
Hi Maxim and Bart

Thanks very much for reviewing my makefile. Your suggestion of an extra command
did indeed solve my problem. That's great.

Pleasure.

My reason for not replying sooner is that I am testing other parts of the
makefile.

What I sent was actually a simplified version. The real version had:

.PHONY : release
        release : $(OBJDIR_R)/$(EXEFILE)
<snip>
$(OBJDIR_R)/$(EXEFILE) : $(ARCHIVES_R)
        $(CXX) -o $(OBJDIR_R)/$(EXEFILE) -ldl 
-Wl,-whole-archive,-export-dynamic $(ARCHIVES_R) $(EXTRA_LIBS_R)
<snip>
$(ARCHIVES_R) $(ARCHIVES_D) : versioninfo $(STATIC_LIBS) $(DYNAMIC_LIBS)

Now $(ARCHIVES_R) contains the paths of the static libraries. I can see
no reason why this should depend on $(DYNAMIC_LIBS) (some code of the
program is linked in dynamic libraries so that we can selectively load it).
So I think better rules would be:

.PHONY : release
        release : $(OBJDIR_R)/$(EXEFILE) $(DYNAMIC_LIBS) versioninfo
<snip>
$(OBJDIR_R)/$(EXEFILE) : $(ARCHIVES_R)
        $(CXX) -o $(OBJDIR_R)/$(EXEFILE) -ldl 
-Wl,-whole-archive,-export-dynamic $(ARCHIVES_R) $(EXTRA_LIBS_R)
<snip>
$(ARCHIVES_R) $(ARCHIVES_D) : $(STATIC_LIBS)

Well, whether your static libraries depend on the dynamic libraries depends on whether this dependency really exists. It is conceivable that any of your static libraries could load any of the dynamic libraries at run-time, so that in this case such a dependency does exist. However, it is likely that this dependency have already been specified in the makefile that builds the static and dynamic libraries as it should, so that it does not need to be repeated in another makefile.

(versionInfo is a small utility that we also want built.

versionInfo could simply be a plain text file with versions of executables and shared libraries. The link rule would extract the corresponding version of the binary being linked from that text file (grep, sed, awk, ...) and embed that version into the binary. Updating this text file would trigger a relink (a complete relink though, so it should not be updated too often). Something like:

lib/libsome.so 1.2.3
bin/some_app 2.3.4

--
Max



_______________________________________________
Help-make mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/help-make

Reply via email to