私は90年代後半から2000年にかけて最後に取り組んだソースコードを持っており、makefileを除いてすべてバックアップしています(はい、悪いバックアップはバックアップがないのと同じくらい良いです):だから...そこにあるかどうか疑問に思っていますメイクファイルを生成する自動化された方法や、依存関係をすばやく分析する良い方法はありますか?
具体的には、私は探しています:
- 依存関係を分析し、リンクの順序を修正できるツール。
- そのような問題が存在しない場合は、過去に同様の問題を抱えていた人から、この問題に最善のアプローチをする方法についてアドバイスをいただければ幸いです。
- 上記の 2 つのオプションのいずれかが失敗した場合、最善のアプローチは、リンク用の依存関係の順序を自動的に生成できる分析/メイクファイル作成ツールを作成することだと思います (私はこのアプローチを延期しました。別のプロジェクトで)。
このヘルプ/アドバイスの探求の理由は、コードベースが 300,000 行のコード (コメントを除く) であり、数百の C/O ファイルにまたがっているためです。そして困惑するので、助けを求めてここに尋ねる最後の試み.
参考までに:依存関係がひどいため、過去にCmake、 AutoMake 、GenMake、および同様のツールを試してメイクファイルを生成しましたが、すべて役に立ちませんでした。
一般的なメイクファイル スクリプト
他の人に役立つかもしれないので、毎回新しいプロジェクトを作成する心配を省くことができるので、複雑でない C および C++ プロジェクトに通常使用するメイクファイルを次に示します。
$(VERBOSE).SILENT:
PROGRAMNAME = prog
CC = gcc
CC += -c
CPP = g++
CPP += -c
ASM = nasm
ASM += -f elf -d ELF_TYPE
LD = g++
OBJFILES = $(patsubst %.c,%.o,$(wildcard *.c))
OBJFILES += $(patsubst %.s,%.o,$(wildcard *.s))
OBJFILES += $(patsubst %.cpp,%.o,$(wildcard *.cpp))
all: $(PROGRAMNAME)
clean:
@echo "Cleaning object files"
@echo " rm -f *.o"
rm -f *.o
@echo "Cleaning backups"
@echo " rm -f *~"
rm -f *~
@echo "Removing program file"
@echo " rm -f "$(PROGRAMNAME)
rm -f $(PROGRAMNAME)
%.o: %.s
@echo "Assembling ASMs "$@
@echo " ASM "$<
$(ASM) $<
%.o: %.c
@echo "(C)ompiling "$@
@echo " CC "$<
$(CC) $<
%.o: %.cpp
@echo "(C++)ompiling "$@
@echo " CPP "$<
$(CPP) $<
$(PROGRAMNAME): $(OBJFILES)
@echo "Get ready...."
@echo "Linking "$@
@echo " LD -o "$(PROGRAMNAME)" "$(OBJFILES)
$(LD) -o $(PROGRAMNAME) $(OBJFILES)
@echo "Cry if it worked! Scream swear and cry if it did not..."
strip: $(PROGRAMNAME)
@echo "Stripping "$(PROGRAMNAME)
echo -n "Size of "$(PROGRAMNAME)" before stripping is "
ls -sh $(PROGRAMNAME) | cut -d' ' -f1
@echo " Stripping "$(PROGRAMNAME)
strip $(PROGRAMNAME)
echo -n "Size of "$(PROGRAMNAME)" after stripping is "
ls -sh $(PROGRAMNAME) | cut -d' ' -f1
nothing:
@echo "Nothing to do; see you later - I'm going home!!!"
@echo "Hey, try some of these:"
@echo "make all - this would be the one you want"
@echo "make strip - does not work in the real world, only in computers"
@echo "make clean - will help clean your mind up"