[英]How to know whether a c++ source file has a main function or not?
有沒有人有關於檢查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 ++不能。 所以我只是想解決它。
感謝更多評論!
您可以使用nm
列出目標文件中的符號。 檢查main
是否是其中之一。
這個Linux命令應該給你一個main()函數的文件列表:
grep -Er 'main\s*\(' * | cut -d':' -f1
您應該處理此列表包含多個文件的情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.