13

ヘッダーファイルを再帰的にフォルダーを検索するようにg++に指示することは可能ですか? 私の例では、g++で検索したい

/ARDrone_SDK_2_0_1/ARDroneLib/Soft/

およびヘッダー ファイルのすべてのサブディレクトリ。これはできますか?簡単なMakefile例を次に示します。

C=g++
CFLAGS=-c -Wall
LDFLAGS=
INC1=/ARDrone_SDK_2_0_1/ARDroneLib/Soft/ <- can this be recursive?
INCDIRS= -I${INC1}
SOURCES=src/dronevid.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=build/dronevid

all: $(SOURCES) $(EXECUTABLE)

$(EXECUTABLE): $(OBJECTS) 
    $(CC) $(LDFLAGS) $(OBJECTS) -o $@

.cpp.o:
    $(CC) $(CFLAGS) $(INCDIRS) $< -o $@
4

1 に答える 1

14

2 つの異なるツールmakeg++.

g++特定のディレクトリのすべてのサブディレクトリを検索する方法はありません。インクルード ファイルを検索するために使用するすべてのディレクトリは、-Iフラグを使用してコマンド ラインで個別に指定する必要があります。

必要に応じて、makeこれらの引数を作成してコマンド ラインに配置できます。GNU make と、コマンドをサポートする UNIX ライクなシステムを使用していると仮定すると、次のようfindなことができます。

INCDIRS := $(addprefix -I,$(shell find /ARDrone_SDK_2_0_1/ARDroneLib/Soft -type d -print))

前もって言っておきますが、これはあまり良い考えではありません。これらのディレクトリがどのような順序で表示されるかはわかりません。また、問題を引き起こす可能性のある異なるディレクトリに同じヘッダー ファイルの複数のコピーがあるかどうかもわかりません。

一般に、サブディレクトリのヘッダーが機能すると予想される方法は、最上位のディレクトリをコンパイル行に追加し#include、コードの行で相対パスを使用することです。何かのようなもの:

#include <subdir/subsubdir/header.h>

それから加えて:

-I/top/level/dir

g++コンパイル行に。

于 2013-11-02T04:37:15.993 に答える