私が取り組んでいる C++ プラグインのために、メイクファイルを使用してビルド プロセスをセットアップしようとしています。別のディレクトリにあるソースファイルを g++ でコンパイルする方法があるかどうか知りたいです。これを行う動機は、以下で説明するように、各ソース ファイルの相対パスを指定する必要がないようにすることです。
私のプロジェクトのディレクトリ構造は次のようになります。
MyPlugin --> src --> Foo.cpp
--> Foo.h
--> Bar.cpp
--> Bar.cpp
--> build --> Makefile
以下は、現在の Makefile の簡略版です。
SRC_PATH=../src
OUT_PATH=../bin
VPATH=${SRC_PATH}
FILES=Foo.cpp Bar.cpp
CC=g++
CFLAGS=-Wall -shared
all:
mkdir -p ${OUT_PATH}
${CC} ${CFLAGS} -I${SRC_PATH} ${FILES} -o ${OUT_PATH}/MyPlugin.so
FILES
これを行うことで、以下のように変数を定義することを避けようとしています:
FILES=../src/Foo.cpp ../src/Bar.cpp
を実行しようとするとmake all
、g++ でエラーが発生しました。フラグで指定されたパスは、 d ファイル-I
の検索にのみ使用されているようです。#include
g++: Foo.cpp: No such file or directory
g++: Bar.cpp: No such file or directory
ワイルドカード ( *.cpp
) は使用できません。コンパイルのためにすべてのファイルを取得する必要があるとは限らないからです。もう 1 つの方法は、ここcd
で説明したように src ディレクトリに移動し、そこから g++ を実行することですが、すべてのファイルが同じディレクトリにある場合にのみ機能します (出力を単一のファイルにする必要があります)。環境変数も設定してみましたが、効果がないようです。.so
PATH
g++ ヘルプ、make ドキュメントを調べ、https: //stackoverflow.com/questions/10010741/g-compile-with-codes-of-base-class-in-a-separate などの StackOverflow の投稿を見ました。 -directoryおよびgcc/g++: "No such file or directory"ですが、使用できる解決策が見つかりませんでした。この問題に対する適切なアプローチを教えてください。
編集例は誤解を招く可能性があります。この簡略化された例では、すべてのソース ファイルを 1 つのディレクトリに格納していますが、実際のプロジェクトでは、いくつかのサブディレクトリと、各ディレクトリに複数のファイルを格納しています。したがって、ディレクトリcd
への ingsrc
は上記の例では機能しますが、実際のプロジェクトでは機能しません (または、少なくとも、それがどのように機能するか知りたいです)。