Je suis en train de mettre à jour des Makefiles pour passer de Make 3.81 à 3.82. En plusieurs endroits, l'auteur original utilisé quelque chose comme ceci pour construire libs statiques:
all: lib$(library).a($objects)
Cela semble construire chaque fichier .o à son tour et l'insérer dans le .a en utilisant ar:
g++ -O2 <snip> -o some_obj.o some_cpp.cpp
ar rv libsome_lib.a some_obj.o
etc...
cette nouvelle version marque, cependant, selfs avec:
*** No rule to make target 'libsome_lib.a()', needed by 'all'
suis-je sûr de remplacer ce raccourci avec la façon dont je suis habitué à faire:
lib$(library).a: $(objects)
ar -rs lib$(library).a $objects
Merci.
EDIT
On dirait que je besoin d'une meilleure éducation Makefile. Voici un extrait de la plus grande Makefile d'origine:
CXXFLAGS += -O2 -g -Wall -Wunused-parameter \
`pkg-config --cflags gthread-2.0 glibmm-2.4 gtkmm-2.4`
libs += `pkg-config --libs gthread-2.0 glibmm-2.4` -lc
%.d: %.cpp
$(SHELL) -ec '$(CXX) -M $(CPPFLAGS) $(CXXFLAGS) $< \
| sed '\''s/\($*\)\.o[ :]*/\1.o [email protected] : /g'\'' > [email protected]; \
[ -s [email protected] ] || rm -f [email protected]'
%.d: %.c
$(SHELL) -ec '$(CXX) -M $(CPPFLAGS) $(CXXFLAGS) $< \
| sed '\''s/\($*\)\.o[ :]*/\1.o [email protected] : /g'\'' > [email protected]; \
[ -s [email protected] ] || rm -f [email protected]'
from_sources = $(patsubst %.c,$(2),$(filter %.c, $(1))) $(patsubst %.cpp,$(2),$(filter %.cpp, $(1)))
sources = $(shell cat sources.inc)
objects = $(call from_sources,$(sources),%.o)
depends = $(call from_sources,$(sources),%.d)
library = some_lib
.PHONY: all clean fresh
all: lib$(library).a($(objects))
clean:
<SNIP>
if neq($(MAKECMDGOALS),clean)
include $(depends)
endif
Lorsque cela fonctionne sous 3.81, je reçois tous les .d créés dépendances, puis faire commence g ++ les fichiers OBJ ing. Sous 3.82, j'obtiens les fichiers .d mais pas .o et make échoue avec "*** Aucune règle à faire ..."
Par souci d'exhaustivité, voulez-vous dire GNU Make? – beldaz
@beldaz, oui désolé GNU Make. – Mark
Ce que la [fonction d'appel] (http://www.gnu.org/software/make/manual/make.html#Call-Function) est censée faire. Notez la façon dont les variables type = (par opposition à: = type) se lient tard, provoquant ainsi des choses intéressantes. Trop intelligent pour mon petit cerveau fatigué. – dmckee