簡體   English   中英

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

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM