有没有人有关于检查c ++源代码中main函数是否存在的想法,因为我想编写一个有点自动的makefile,这样带有main函数的c ++源代码将被链接而没有main函数的c ++源代码将无法链接
词法或语法分析可能不适合这个简单的任务。
任何现有的命令行工具或库对此自动任务都非常有帮助。
感谢您的任何想法!
makefile文件:
VPATH = include
CPPFLAGS += -I include
CFLAGS += -I include
C_SOURCE := $(shell find . -iname '*.c')
CPP_SOURCE := $(shell find . -iname '*.cpp')
D_OBJ := $(subst .cpp,.d, $(CPP_SOURCE))
EXE := $(subst .c,, $(C_SOURCE))
EXE += $(subst .cpp,, $(CPP_SOURCE))
.PHONY: all
all: $(EXE)
include $(D_OBJ)
$(D_OBJ): %.d: %.cpp
$(CC) -MM $(CPPFLAGS) $< > $@.temp;
auto_depend_gen $@ "$@.temp" > $@;
rm -rf $@.temp
#print_msg:
# @printf "$(EXE)\n"
# @printf "$(D_OBJ)\n"
.PHONY: clean
clean:
rm $(EXE) $(D_OBJ)
所以这是一个自动依赖生成makefile。使用这个makefile,每次添加C ++源文件时都不需要修改makefile。标题由“gcc -MM”命令确定,我想要链接的目标文件与除后缀之外的头文件共享相同的名称。 auto_depend_gen是我自己编写的程序,只删除“gcc -MM”生成的文件第一行的.o后缀。
有些源文件有主要功能,有些则没有,所以出现了这个问题。
也许更普遍的问题是:虽然Java项目可以自动构建,但是多个.class文件具有主函数,但C ++不能。所以我只是想解决它。
感谢更多评论!
答案 0 :(得分:5)
您可以使用nm
列出目标文件中的符号。检查main
是否是其中之一。
答案 1 :(得分:1)
这个Linux命令应该给你一个带main()函数的文件列表:
grep -Er 'main\s*\(' * | cut -d':' -f1
您应该处理此列表包含多个文件的情况。