[英]Makefile issue with Class template: clang warning linker input unused
我有2個類:具有定義和實現的類模板list.t,以及ticker.h和ticker.cpp,以及驅動程序main.cpp。 我想編譯main.cpp以獲得同時使用代碼和列表類的main.x。 到目前為止,這是我的makefile。
# makefile for fx project
CC = g++
CFLAGS = -g -Wall -Wextra
default: main.x
main.x: main.o ticker.o list.o
$(CC) $(CFLAGS) -o $@ 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上搜索了此錯誤消息,但是我或者沒有完全了解他們的解決方案,或者他們沒有為我工作。 無論哪種方式,請讓我知道您是否有解決此問題的方法,或者對此makefile的質量和結構有任何其他評論。 同樣,對於為什么我的標志顯然未被使用的任何知識也將不勝感激!
謝謝!
僅當編譯源文件以創建目標文件時,才需要在命令行中使用-c
。
更改
main.x: main.o ticker.o list.o
$(CC) $(CFLAGS) -c main.o list.o ticker.o
至
main.x: main.o ticker.o list.o
$(CC) $(CFLAGS) -o $@ main.o list.o ticker.o
^^^^^
$@
是規則目標的文件名。
有關更多此類變量,請參見GNU make:自動變量。
生成文件應為以下內容:
CC = g++
CPPFLAGS = -g -Wall -Wextra
default: main.x
main.x: main.o ticker.o
$(CC) -o $@ main.o ticker.o
ticker.o: ticker.cpp
$(CC) -c ticker.cpp $(CPPFLAGS)
main.o: list.t main.cpp
$(CC) -c main.cpp $(CPPFLAGS)
您不編譯模板文件。 該實現應與類聲明位於同一文件內(也可以將.hpp擴展名放在同一文件中)。 然后,該模板必須包含在其他文件中。 例如,在主機中放入#include "list.t"
指令。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.