5

私が取り組んでいる 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++ を実行することですが、すべてのファイルが同じディレクトリにある場合にのみ機能します (出力を単一のファイルにする必要があります)。環境変数も設定してみましたが、効果がないようです。.soPATH

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は上記の例では機能しますが、実際のプロジェクトでは機能しません (または、少なくとも、それがどのように機能するか知りたいです)。

4

3 に答える 3

7

次のように、実際のソース ファイルの 2 番目の変数を使用できます。

FILES = Foo.cpp Bar.cpp
SOURCES = $(FILES:%.cpp=$(SRC_PATH)/%.cpp)

FILES次に、ビルド時に使用する代わりに を使用しますSOURCES

于 2012-11-30T06:01:14.010 に答える
1

コンソールでMakeの出力を見ると、次のようになります。

g++ -Wall -shared -I../src Foo.cpp Bar.cpp -o ../bin/MyPlugin.so

ご覧のとおり、コンパイルするファイルへのパスが正しくありません。ソースファイル名の前に../srcを付けることで、これを実現する1つの方法についてはすでに説明しました(このアプローチの問題点)。または、以下に示すようにファイルを定義できます。

FILES=${SRC_PATH}/Foo.cpp \
      ${SRC_PATH}/Bar.cpp

上記の方法を使用すると、ソースパスが変更された場合に手動で編集する必要はありません。

于 2012-11-30T05:30:32.667 に答える
1

次のように、すべての候補ソース ディレクトリを VPATH に配置できます。

VPATH=${SRC_PATH}:other_source_dir1:other_source_dir2

次に、g++ がソース ファイルを必要とする場合、make は VPATH に沿ってソース ファイルを探します。

そして、.cc ファイルリストを .o リストに変更してみてください:

FILES = file1.o file2.o

そして、make ファイルに次の 2 行を追加します。2 行目は TAB で始まる必要があることに注意してください。

.cc.o:
    $(CC) $(CFLAGS) -c $<  # NOTE This should begin with TAB
于 2012-11-30T05:26:03.833 に答える