У меня есть 2 класса: шаблон класса list.t с определением и реализацией и ticker.h и ticker.cpp вместе с программой драйвера main.cpp. Я хочу скомпилировать main.cpp, чтобы перейти к main.x, который использует как тикер, так и класс списка. Это мой файл makefile.Ошибка Makefile с шаблоном класса: clang warning linker input unused
# makefile for fx project
CC = g++
CFLAGS = -g -Wall -Wextra
default: main.x
main.x: main.o ticker.o list.o
$(CC) $(CFLAGS) -o [email protected] main.o list.o ticker.o
list.o: list.t
$(CC) -c list.t
ticker.o: ticker.cpp
$(CC) -c ticker.cpp list.t
main.o: list.t ticker.cpp main.cpp
$(CC) -c main.cpp ticker.cpp list.t
Но выполнив команду сделайте я получаю следующее сообщение об ошибке:
make
g++ -c main.cpp ticker.cpp list.t
clang: warning: list.t: 'linker' input unused
g++ -c list.t
clang: warning: list.t: 'linker' input unused
g++ -g -Wall -Wextra -o main.x main.o list.o ticker.o
clang: error: no such file or directory: 'list.o'
make: *** [main.x] Error 1
List.t - (без реализации)
#ifndef LIST_T
#define LIST_T
#include <iostream>
template <typename T>
class List
{
public:
// constructors
List();
List(T);
List(const List&);
~List();
// member functions
List& operator = (const List&);
void PushFront (const T&);
void PushBack (const T&);
T PopFront();
T PopBack();
T& Front();
T& Back();
const T& Front() const;
const T& Back() const;
size_t Size() const;
bool Empty() const;
void Clear();
void Display (std::ostream&, char = '\0') const;
//private vars
private:
class Link
{
Link (const T& t) : element_(t), nextLink_(0), previousLink_(0) {};
T element_;
Link* nextLink_;
Link* previousLink_;
friend class List<T>;
};
Link* firstLink_;
Link* lastLink_;
};
Я уверен, что это просто ошибка , и я просмотрел google для этого сообщения об ошибке, но я либо не полностью понимаю их решения, либо они не работают для меня. В любом случае, дайте мне знать, есть ли у вас решение этой проблемы или какие-либо другие комментарии о качестве и структуре этого make-файла. Также будет полезно оценить любые знания о том, почему мои флаги, по-видимому, неиспользованы!
Спасибо!
Почему параметр '-c', если вы пытаетесь связать исполняемый файл? –
Почему ваш кланг называется g ++? – SergeyA
@SergeyA, не уверен. Запуск через терминал на Mac с помощью bash. не знаю достаточно о компиляторах, чтобы сказать вам. Что касается -c, то, как мне объяснил мне R Sahu, я верю. – Zroach