如何知道c ++源文件是否具有main函数?

jac*_*nsc 3 c++ makefile

有没有人有关于在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)
Run Code Online (Sandbox Code Playgroud)

所以这是一个自动依赖生成makefile.使用这个makefile,每次添加C++源文件时都不需要修改makefile.标题由"gcc -MM"命令确定,我想要链接的目标文件与除后缀之外的头文件共享相同的名称.auto_depend_gen是我自己编写的程序,只删除"gcc -MM"生成的文件第一行的.o后缀.

有些源文件有主要功能,有些没有,所以出现了这个问题.

也许更普遍的问题是:虽然Java项目可以自动构建,但是多个.class文件具有主函数,但C++不能.所以我只是想解决它.

感谢更多评论!

zch*_*zch 5

您可以使用nm列出目标文件中的符号.检查是否main是其中之一.