メイン関数を持つC++ソースはリンクされ、メイン関数を持たないものはリンクされないように、多少の自動メークファイルを書きたいので、C++ソースのmain関数の存在をチェックするアイデアはありますか?C++ソースファイルがmain関数を持っているかどうかを知る方法?
レキシカルまたは文法解析は、この単純なタスクには適していない可能性があります。
既存のコマンドラインツールやライブラリは、この自動タスクに非常に役立ちます。
ありがとうございました!
メイクファイル:
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) $< > [email protected];
auto_depend_gen [email protected] "[email protected]" > [email protected];
rm -rf [email protected]
#print_msg:
# @printf "$(EXE)\n"
# @printf "$(D_OBJ)\n"
.PHONY: clean
clean:
rm $(EXE) $(D_OBJ)
だから、これは依存関係の自動生成メイクファイルです。このメイクファイルでは、C++ソースファイルを追加するたびにmakefileを変更する必要はありません。ヘッダーは "gcc -MM"コマンドで決定され、リンクしたいオブジェクトファイルは、サフィックス以外のヘッダーファイルと同じ名前を共有します。 auto_depend_genは自分で作成したプログラムで、 "gcc -MM"によって生成されたファイルの最初の行の.o接尾辞を削除するだけです。
ソースファイルの中には主な機能がありますが、そうでないものもあります。この問題が発生します。
より一般的な質問ですが、Javaプロジェクトはmain関数を持つ複数の.classファイルで自動的に構築できますが、C++では自動的に作成できません。だから私はただそれを解決したい。
もっとコメントを投稿してください!
簡単なタスク?コンパイルするコードを書いた場合、最も明白なアプローチは、すべてのファイルを解析して主な関数が定義されているかどうかを調べるのではなく、ファイルに名前を付けることですメイン関数 "main.cpp" – Castilho
何とリンクしていますか?なぜあなたは 'main'を別の方法で扱う必要がありますか? –
与えられたプロジェクトで変更する可能性は低いので、私はコマンドライン引数としてmainを使ってcppファイルを指定するか、makeファイルの先頭にconfig設定を指定します。 –