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

时间:2012-03-18 11:46:22

标签: 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)

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

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

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

感谢更多评论!

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

这个Linux命令应该给你一个带main()函数的文件列表:

grep -Er 'main\s*\(' * | cut -d':' -f1

您应该处理此列表包含多个文件的情况。