Hello,
I’m trying to make a Makefile to compile some .cc code some of which uses Minuit2.
I was able to run the code in ROOT by .L class.cc and then running the main code from a .C macro. However, as the framework gets larger I want a more professional way of doing this. I made this make file:
CFLAGS=-c -g -Wall `root-config --cflags`
LDFLAGS=`root-config --glibs`
SOURCES=TauAna.cc class1.cc class2.cc
OBJECTS=$(SOURCES:.cc=.o)
EXECUTABLE=TauAna
all: $(SOURCES) $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) -o $@
.cc.o:
$(CC) $(CFLAGS) $< -o $@
clean:
rm ./*~ ./*.o ./TauAna
And I am seeing these types of errors:
g++ -c -g -Wall `root-config --cflags` TauAna.cc -o TauAna.o
g++ `root-config --glibs` TauAna.o -o TauAna
Undefined symbols for architecture x86_64:
"ROOT::Minuit2::MnStrategy::MnStrategy(unsigned int)", referenced from:
RunMinuit(TString, TString) in TauAna.o
"ROOT::Minuit2::MnApplication::SetLimits(unsigned int, double, double)", referenced from:
RunMinuit(TString, TString) in TauAna.o
"ROOT::Minuit2::MnApplication::MnApplication(ROOT::Minuit2::FCNBase const&, ROOT::Minuit2::MnUserParameterState const&, ROOT::Minuit2::MnStrategy const&, unsigned int)", referenced from:
ROOT::Minuit2::MnMigrad::MnMigrad(ROOT::Minuit2::FCNBase const&, ROOT::Minuit2::MnUserParameterState const&, ROOT::Minuit2::MnStrategy const&) in TauAna.o
"ROOT::Minuit2::MnApplication::operator()(unsigned int, double)", referenced from:
RunMinuit(TString, TString) in TauAna.o
vtable for ROOT::Minuit2::MnMigrad in TauAna.o
"ROOT::Minuit2::MinimumBuilder::MinimumBuilder()", referenced from:
ROOT::Minuit2::VariableMetricBuilder::VariableMetricBuilder(ROOT::Minuit2::VariableMetricBuilder::ErrorUpdatorType) in TauAna.o
"ROOT::Minuit2::MnUserParameters::MnUserParameters(std::__1::vector<double, std::__1::allocator<double> > const&, std::__1::vector<double, std::__1::allocator<double> > const&)", referenced from:
RunMinuit(TString, TString) in TauAna.o
"ROOT::Minuit2::MnUserParameterState::MnUserParameterState(ROOT::Minuit2::MinimumState const&, double, ROOT::Minuit2::MnUserTransformation const&)", referenced from:
ROOT::Minuit2::BasicFunctionMinimum::UserParameters() const in TauAna.o
"ROOT::Minuit2::MnUserParameterState::MnUserParameterState(ROOT::Minuit2::MnUserParameters const&)", referenced from:
RunMinuit(TString, TString) in TauAna.o
"ROOT::Minuit2::MnMinos::MnMinos(ROOT::Minuit2::FCNBase const&, ROOT::Minuit2::FunctionMinimum const&, unsigned int)", referenced from:
RunMinuit(TString, TString) in TauAna.o
"ROOT::Minuit2::MnPrint::SetLevel(int)", referenced from:
RunMinuit(TString, TString) in TauAna.o
"ROOT::Minuit2::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, ROOT::Minuit2::FunctionMinimum const&)", referenced from:
RunMinuit(TString, TString) in TauAna.o
"ROOT::Minuit2::ModularFunctionMinimizer::Minimize(ROOT::Minuit2::FCNGradientBase const&, ROOT::Minuit2::MnUserParameters const&, ROOT::Minuit2::MnStrategy const&, unsigned int, double) const", referenced from:
vtable for ROOT::Minuit2::VariableMetricMinimizer in TauAna.o
"ROOT::Minuit2::ModularFunctionMinimizer::Minimize(ROOT::Minuit2::FCNGradientBase const&, ROOT::Minuit2::MnUserParameters const&, ROOT::Minuit2::MnUserCovariance const&, ROOT::Minuit2::MnStrategy const&, unsigned int, double) const", referenced from:
vtable for ROOT::Minuit2::VariableMetricMinimizer in TauAna.o
"ROOT::Minuit2::ModularFunctionMinimizer::Minimize(ROOT::Minuit2::FCNGradientBase const&, ROOT::Minuit2::MnUserParameterState const&, ROOT::Minuit2::MnStrategy const&, unsigned int, double) const", referenced from:
vtable for ROOT::Minuit2::VariableMetricMinimizer in TauAna.o
"ROOT::Minuit2::ModularFunctionMinimizer::Minimize(ROOT::Minuit2::FCNGradientBase const&, std::__1::vector<double, std::__1::allocator<double> > const&, std::__1::vector<double, std::__1::allocator<double> > const&, unsigned int, unsigned int, double) const", referenced from:
vtable for ROOT::Minuit2::VariableMetricMinimizer in TauAna.o
"ROOT::Minuit2::ModularFunctionMinimizer::Minimize(ROOT::Minuit2::FCNGradientBase const&, std::__1::vector<double, std::__1::allocator<double> > const&, unsigned int, std::__1::vector<double, std::__1::allocator<double> > const&, unsigned int, unsigned int, double) const", referenced from:
vtable for ROOT::Minuit2::VariableMetricMinimizer in TauAna.o
"ROOT::Minuit2::ModularFunctionMinimizer::Minimize(ROOT::Minuit2::MnFcn const&, ROOT::Minuit2::GradientCalculator const&, ROOT::Minuit2::MinimumSeed const&, ROOT::Minuit2::MnStrategy const&, unsigned int, double) const", referenced from:
vtable for ROOT::Minuit2::VariableMetricMinimizer in TauAna.o
"ROOT::Minuit2::ModularFunctionMinimizer::Minimize(ROOT::Minuit2::FCNBase const&, ROOT::Minuit2::MnUserParameters const&, ROOT::Minuit2::MnStrategy const&, unsigned int, double) const", referenced from:
vtable for ROOT::Minuit2::VariableMetricMinimizer in TauAna.o
"ROOT::Minuit2::ModularFunctionMinimizer::Minimize(ROOT::Minuit2::FCNBase const&, ROOT::Minuit2::MnUserParameters const&, ROOT::Minuit2::MnUserCovariance const&, ROOT::Minuit2::MnStrategy const&, unsigned int, double) const", referenced from:
vtable for ROOT::Minuit2::VariableMetricMinimizer in TauAna.o
"ROOT::Minuit2::ModularFunctionMinimizer::Minimize(ROOT::Minuit2::FCNBase const&, ROOT::Minuit2::MnUserParameterState const&, ROOT::Minuit2::MnStrategy const&, unsigned int, double) const", referenced from:
vtable for ROOT::Minuit2::VariableMetricMinimizer in TauAna.o
"ROOT::Minuit2::ModularFunctionMinimizer::Minimize(ROOT::Minuit2::FCNBase const&, std::__1::vector<double, std::__1::allocator<double> > const&, std::__1::vector<double, std::__1::allocator<double> > const&, unsigned int, unsigned int, double) const", referenced from:
vtable for ROOT::Minuit2::VariableMetricMinimizer in TauAna.o
"ROOT::Minuit2::ModularFunctionMinimizer::Minimize(ROOT::Minuit2::FCNBase const&, std::__1::vector<double, std::__1::allocator<double> > const&, unsigned int, std::__1::vector<double, std::__1::allocator<double> > const&, unsigned int, unsigned int, double) const", referenced from:
vtable for ROOT::Minuit2::VariableMetricMinimizer in TauAna.o
"ROOT::Minuit2::MnMinos::operator()(unsigned int, unsigned int, double) const", referenced from:
RunMinuit(TString, TString) in TauAna.o
Does anyone know what I have missed?
Thanks.