make:致命错误:目标命令失败

时间:2017-08-05 12:34:51

标签: c++ unix makefile g++ solaris

我目前正在开发一个c ++项目,但我遇到了一个无法让我进步的问题。 这是我的makefile:

Test:   Test2.cpp Joueur.o Matricule.o Classement.o 
g++ -o Test2 Test2.cpp Joueur.o Matricule.o Classement.o 

Joueur.o:   Joueur.cxx Joueur.h
        g++ Joueur.cxx -c

Matricule.o:    Matricule.cxx Matricule.h
        g++ Matricule.cxx -c

Classement.o:   Classement.cxx Classement.h
        g++ Classement.cxx -c

我在之前的练习中使用了相同的makefile但是没有Classement和Matricule并且它有效。 当我使用这个make时,它会显示我的消息:

student@solaris11DMSept2015:~/Téléchargements$ make
g++ -o Test2 Test2.cpp Joueur.o Matricule.o Classement.o
Undefined           first referenced
 symbol                 in file
Essai3()                            /var/tmp//cc62aqDe.o
Essai4()                            /var/tmp//cc62aqDe.o
Essai2()                            /var/tmp//cc62aqDe.o
ld: fatal: symbol referencing errors
collect2: error: ld returned 1 exit status
*** Error code 1
make: Fatal error: Command failed for target `Test'

这是test2.cpp的代码:

#include <stdlib.h>
#include <iostream>
#include <string.h>
#include "Joueur.h"
#include "Matricule.h"
#include "Classement.h"
using namespace std;


int  Menu();
void Essai1();
void Essai2();
void Essai3();
void Essai4();


int main(int argc,char* argv[])
{
  bool fini = false;

  while(!fini)
  {
  int choix;
    if (argc == 2) { choix = atoi(argv[1]); fini = true; }
    else choix = Menu();
    switch(choix)
    {
      case 1 : Essai1(); break;
      case 2 : Essai2(); break;
      case 3 : Essai3(); break;
      case 4 : Essai4(); break;
      default : fini = true ; break;
    }
  }

  return 0;
}

//*******************************************************************************************************
int Menu()
{
  cout << endl;
  cout << "--------------------------------------------------------------------------------------" << endl;
  cout << "--- JEU DE TESTS 2 -------------------------------------------------------------------" << endl;
  cout << "--------------------------------------------------------------------------------------" << endl;
  cout << " 1. Tests de la classe Matricule" << endl;
  cout << " 2. Tests de la classe Classement" << endl;
  cout << " 3. Tests de la classe Joueur (avec agregations par valeur et par reference)" << endl;
  cout << " 4. Tests des variables statiques utiles" << endl;
  cout << " 5. Quitter" << endl << endl;

  int ch;
  cout << "  Choix : ";
  cin >> ch; // Faites pas le biess !
  return ch;
}

//*******************************************************************************************************
//*** Tests de la classe Matricule **********************************************************************
//*******************************************************************************************************
void Essai1()
{
  cout << "(1) ***** Test des constructeurs de Matricule *****" << endl;
  {
    Matricule m1, m2("01/09/2016",25369), m3(m2);
    cout << "Defaut : "; m1.Affiche();
    cout << "Initialisation : "; m2.Affiche();
    cout << "Copie : "; m3.Affiche();
    cout << endl;
  }

  cout << endl << "(2) **** Test des setters/getters *****" << endl;
  {
    Matricule m;
    cout << "Defaut : "; m.Affiche();
    m.setDateInscription("15/10/2012");
    m.setNumero(14817);
    cout << "Apres setters : "; m.Affiche();
    cout << endl << "Date inscription : " << m.getDateInscription() << endl;
    cout << "Numero : " << m.getNumero() << endl;
  }
}

我是初学者,但我知道这种makefile很简单,但我还没有发现问题。 这些问题真的出现在makefile中吗?

1 个答案:

答案 0 :(得分:0)

这个问题已经解决,它不是来自那些代码,问题来自我的课程。现在我发出了消息&#34; Segmentation fault(core dumped)&#34;当我选择&#34; essai3&#34; 这个问题来自这个课程:

    #include "Joueur.h"
    #include "Classement.h"
    #include "Matricule.h"
    #include <stdlib.h>
    #include <iostream>
    #include <string.h>

    using namespace std;

    Joueur::Joueur(){
        nom = new char[20];
        prenom = new char[20];
        numclub =0;
        classement;
        matricule;
    }
    Joueur::Joueur(const char *n,const char *p,const int x){
        setNom(n);
        setPrenom(p);
        setNumClub(x);
    }
    Joueur::Joueur(const char *n,const char *p,const int x,const Matricule m){
        setNom(n);
        setPrenom(p);
        setNumClub(x);
        setMatricule(m);
    }
    Joueur::Joueur(const Joueur &j)
    {   
        setNom(j.getNom());
        setPrenom(j.getPrenom());
        setNumClub(j.getNumClub());                 

    }
    void Joueur::Affiche(){
        cout << "nom :" << getNom() << endl;
        cout << "prenom :" << getPrenom() << endl;
        cout << "numéro du club:" << getNumClub() << endl;
        cout << "numéro matricule: " << matricule.getNumero()<<endl;
        cout << "date inscription: " << matricule.getDateInscription()<<endl;
        cout << "classement: "<< classement->getLettre()<<classement->getNombre()<<endl;
    }

    void Joueur::setMatricule(const Matricule m) {
        matricule.setNumero(m.getNumero());
        matricule.setDateInscription(m.getDateInscription());
    }

    void Joueur::setClassement(const Classement &c) {
        classement = new Classement();
        classement->setLettre(c.getLettre());
        classement->setNombre(c.getNombre());
    }

    void Joueur::setNom(const char* n) {
        if((strlen(n)+1)<20){
            strcpy(nom,n);
            return ;
        }
        else{
            return ;
        }
    }   

    void Joueur::setPrenom(const char* p) { 
        if((strlen(p)+1)<20){
            strcpy(prenom,p);
            return ;
        }
        else{
            return ;
        }
    }

    void Joueur::setNumClub(int x){
        if(x<0){
            return ;
        }
        else{
            numclub = x;
        }
    }

    Matricule Joueur::getMatricule()const
    {
        return matricule;
    }

    Classement* Joueur::getClassement()const
    {
        return classement;
    }

    char* Joueur::getNom()const
    { 
        return nom;
    }

    char* Joueur::getPrenom()const
    {
        return prenom;
    }

    int Joueur::getNumClub()const
    {
        return numclub;
    }

    Joueur::~Joueur(){
        delete[] nom;
        delete[] prenom;
    }