Что не так с моим простым g ++ Makefile? - PullRequest
0 голосов
/ 02 декабря 2011

У меня есть файл заголовка sieve.h, в котором нет файла cpp.Вот что у меня есть для make-файла на данный момент:

bitarray_executable: bitarray.o sieve.o main.o
    g++ -o bitarray.out bitarray.o sieve.o main.o

sieve.o: sieve.h
    g++ -o sieve.o -c sieve.h

main.o: main.cpp bitarray.h sieve.h
    g++ -o main.o -c main.cpp

clean:
    rm -f *.o bitarray

Я получаю ошибку, когда делаю это:

g++ -o sieve.o -c sieve.h
sieve.h:15: error: expected `)' before ‘&’ token
make: *** [sieve.o] Error 1

Это сито:

#ifndef _SIEVE_H
#define _SIEVE_H

#include <iostream>

#include "bitarray.h"
using namespace std;

class Sieve
{
 public:
  Sieve(BitArray& x)
    {
      for (int i = 0; i < x.Length; i++)
        x.Set(i);
    }

};

#endif

Кто-нибудь имеет больше опыта написания make-файлов, чтобы сказать мне, что с этим не так?

Ответы [ 2 ]

3 голосов
/ 02 декабря 2011

вы компилируете заголовочный файл

delete

sieve.o: sieve.h
    g++ -o sieve.o -c sieve.h
1 голос
/ 02 декабря 2011

.o файлы скомпилированы из таких файлов, как .cpp или .c или .c ++
Если предположить, что sieve.h включен в main.cpp, так как вы заявляете, что у него нет .cpp, то для него нет ничего для компиляциино вы можете указать другие правила зависимости, как вы это сделали с main.o

У вас нет подробностей о bitarray, поэтому я предполагаю, что это был предоставленный объектный файл или соответствует правилам по умолчанию / подразумеваемым для создания.o

Таким образом, ваш make-файл может быть упрощен до (что почти так же, как у fazo)

bitarray_executable: bitarray.o main.o
    g++ -o bitarray.out bitarray.o main.o

main.o: main.cpp bitarray.h sieve.h
    g++ -o main.o -c main.cpp

clean:
    rm -f *.o bitarray

Чтобы привести в порядок немного, при условии, что правило по умолчанию для создания .o-файлов

objects := $(patsubst %.cpp,%.o,$(wildcard *.cpp))

bitarray_executable: bitarray.out

bitarray.out: $(objects)
    g++ -o bitarray.out $(objects)

main.o: main.cpp bitarray.h sieve.h

clean:
    rm -f *.o bitarray.out
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...