我有我最后一次在 90 年代后期 - 2000 年工作的源代码,并且除了 makefile 之外,它都备份了(是的,糟糕的备份几乎和没有备份一样好):所以......我想知道是否有是否有任何自动生成生成文件的方法或快速分析依赖关系的好方法?
具体来说,我正在寻找:
- 一个可以分析依赖关系并为我更正链接顺序的工具。
- 如果不存在,那么非常感谢过去遇到过类似问题的人提供的有关如何最好地解决此问题的建议
- 如果上述两个选项中的任何一个都失败,我认为最好的方法是创建一个分析/生成文件创建工具,它可以自动生成链接的依赖顺序(我推迟了这种方法,因为时间总是紧缺在另一个项目中)。
寻求帮助/建议的原因是代码库是 300,000 行代码(不包括注释)并且跨越数百个 C/O 文件,而且我经常尝试手动创建一个 make-file,它令人沮丧和困惑,因此我最后一次尝试在这里寻求帮助和询问。
供参考:我过去曾尝试过Cmake、AutoMake、GenMake和类似工具来生成 makefile,但都无济于事,因为依赖关系非常可怕。
通用 makefile 脚本
由于它可能对其他人有用,这里是我通常用于不那么复杂的 C 和 C++ 项目的 makefile,因为它让我不必担心每次都创建一个新的:
$(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"