J'écris une bibliothèque (dynamique) en C++ et j'ai un ensemble de tests pour cela. Actuellement, je travaille sur un makefile (cible par défaut) qui peut soit construire la bibliothèque, soit compiler et exécuter les tests (cible test
). La différence entière est dans un couple d'indicateurs de liens et si un seul fichier .cpp
(contenant main
) est inclus, mais je ne peux pas obtenir la cible test
pour construire correctement, car la liste des dépendances n'est pas mise à jour pour une raison quelconque. est ici l'ensemble makefile:Ajout de fichiers source et mise à jour des dépendances dans les fichiers makefiles
CXX = g++
RM=rm -f
EXTRA_CCFLAGS = -Wall -Wextra -Wcast-qual -Wfloat-equal -Wpedantic -Wpointer-arith -Wshadow
CXXOPTFLAGS = -O2
CXXFLAGS = -std=c++11 $(EXTRA_CCFLAGS) $(CXXOPTFLAGS)
LDLIBS=-larmadillo
MAKELIBFLAGS=-current_version 0.1 -compatibility_version 0.1 -dynamiclib
TARGET = libadsp.dylib
TESTTARGET = dsptest
SOURCE_FILES=src/stft.cpp src/filters.cpp src/windows.cpp src/helpers.cpp
OBJECT_FILES=$(subst .cpp,.o,$(SOURCE_FILES))
all: $(TARGET)
test: SOURCE_FILES += tests/tests.cpp
test: OBJECT_FILES = $(subst .cpp,.o,$(SOURCE_FILES))
test: $(TESTTARGET)
$(TARGET): $(OBJECT_FILES)
$(CXX) $(CXXFLAGS) $(MAKELIBFLAGS) -o $(TARGET) $(OBJECT_FILES) $(LDLIBS)
$(TESTTARGET): $(OBJECT_FILES)
$(CXX) $(CXXFLAGS) -o $(TESTTARGET) $(OBJECT_FILES) $(LDLIBS)
./dsptest
depend: .depend
.depend: $(SOURCE_FILES)
$(RM) ./.depend
$(CXX) $(CXXFLAGS) -MM $^>>./.depend;
.PHONY: clean
clean:
$(RM) $(OBJECT_FILES)
$(RM) ./.depend
include .depend
Typiquement 'make' est utilisé pour _make_ things, pas pour exécuter des choses (je ne suis pas fan des effets secondaires de make). Cela étant dit, vous voulez être en mesure de faire votre test ou votre construction régulière. Une note: vous reconstruisez toujours votre fichier '.depend', quoi qu'il arrive. Si c'était un gros projet, cela tuerait votre temps de construction. Il est préférable d'avoir un répertoire d'objets spécifique à la cible, puis de générer des fichiers .d pour chaque source au fur et à mesure que vous les compilez. Ce lien: http://make.mad-scientist.net/papers/advanced-auto-dependency-generation/] a une bonne description. – blackghost