このリンクで提案されているように、#include ディレクティブを使用して C++ テンプレート クラスを 2 つのファイルに分割しました -->複数のファイルに広がるテンプレート
両方のファイルで、標準の名前 *.h および *.cpp を使用しました。makefile に *.h を含めました。これは、私が理解しているように、このように分割された両方のファイルが実際にはコンパイラの観点からは 1 つであるためです。通常の *.cpp ファイルをコンパイルする場合と同じコンパイル オプションを設定しました。
ただし、makefile を使用してコンパイルしようとすると、次のエラーが発生します。
Stos.o: file not recognized: File format not recognized
collect2: ld returned 1 exit status
make: *** [program] Error 1
*.h ファイルをコンパイルしたことが原因である可能性があることをどこかで読みました。代わりに何をすべきかわかりません。
ご協力ありがとうございました。
編集
問題をより明確にするために、メイクファイル自体を投稿しています。申し訳ありませんが、名前が英語ではありませんが、この場合は問題ありません。makefile に合うようにエラー メッセージを更新しました。
ここでの提案により、テンプレート ファイルの名前を上記の *.h および *.cpp から *.hpp および *.tpp に変更しました。
CC=g++
CFLAGS=-c -Wall -pedantic -W
COMP= $(CC) $(CFLAGS)
program: Graf.o wgraf.o wnazwe.o menu.o Stos.o TabDyn.o komunikaty.o main.o
$(CC) Graf.o wgraf.o wnazwe.o menu.o Stos.o TabDyn.o komunikaty.o main.o -o program
Graf.o: graf_struktura/Graf.cpp graf_struktura/Graf.h lifo/TabDyn.hpp lifo/Stos.hpp
$(COMP) graf_struktura/Graf.cpp -o $@
wgraf.o: wczytywanie_grafu/wczytaj_graf.cpp wczytywanie_grafu/wczytaj_graf.h graf_struktura/Graf.h lifo/Stos.hpp
$(COMP) wczytywanie_grafu/wczytaj_graf.cpp -o $@
wnazwe.o: wczytywanie_grafu/wczytaj_nazwe_pliku.cpp wczytywanie_grafu/wczytaj_nazwe_pliku.h wczytywanie_grafu/komunikaty.cpp
$(COMP) wczytywanie_grafu/wczytaj_nazwe_pliku.cpp -o $@
komunikaty.o: wczytywanie_grafu/komunikaty.cpp
$(COMP) wczytywanie_grafu/komunikaty.cpp
menu.o: menu/menu.cpp graf_struktura/Graf.h
$(COMP) menu/menu.cpp
main.o: main.cpp wczytywanie_grafu/wczytaj_nazwe_pliku.h wczytywanie_grafu/wczytaj_graf.h menu/menu.cpp graf_struktura/Graf.h
$(COMP) main.cpp
#Here is the issue.
Stos.o: lifo/Stos.hpp lifo/Stos.tpp lifo/TabDyn.hpp
$(COMP) lifo/Stos.hpp -o $@
TabDyn.o: lifo/TabDyn.hpp lifo/TabDyn.tpp
$(COMP) lifo/TabDyn.hpp -o $@
コンパイラは実際に「Stos.o」を作成しますが、それを「プログラム」に含めることができず、引用されたエラーが発生します。
私の問題がより明確になることを願っています。makefile が洗練されていない場合は申し訳ありません。私はまだメイクファイルの初心者です。ご理解ください。