0

私はautomakeビルドシステムを使用している比較的大きなプロジェクトに取り組んでいます。

ここで問題となるのは、プロジェクトを別のプロジェクトのライブラリにリンクする必要があることです(これは正常に機能します)が、他のプロジェクトのソースツリーのヘッダーも含める必要があります(api.h)。

INCLUDES = -I@REMOTE_PROJECT_DIR@

リモートソースディレクトリに名前が一致する.hファイルがあるため、Makefile.amでは機能しません。どうすれば追加できapi.hますか?

プロジェクトのincludeディレクトリにシンボリックリンクを使用しましたが、ソースをパブリックリポジトリにプッシュする必要があり、それを使用するすべての人が別のディレクトリに他のプロジェクトを持っているため、configureparamを使用する必要があります。

4

2 に答える 2

1

Makefile.amまたはconfigure.acを微調整する必要はありません。api.hが標準の場所(例:/ usr / include)にインストールされている場合、必要なのはconfigure.acのAC_CHECK_HEADERS([api.h])だけです。api.hが非標準の場所(例:/ home / joe / include)にインストールされている場合、プロジェクトでそれを取得する方法は、構成時に決定されます。configureを実行するときは、引数CPPFLAGS = -I / home / joe/includeをconfigureの呼び出しに追加します。ビルドファイル自体に非標準の場所を指定することはありません。

もう1つの方法は、pkg-configを使用することですが、configureを実行すると、ヘッダーファイルの非標準の場所が引き続き処理されます。(今回はCPPFLAGSではなくPKG_CONFIG_PATHを設定します)

于 2010-03-09T15:00:04.157 に答える
0

同じ名前のヘッダーがある場合、それらの少なくとも 1 つを別の名前のディレクトリに配置し、ディレクトリ名を使用して含めることができます。

サンプルのディレクトリ構造は次のとおりです。

mylibrary/include/myblirary/api.h

myproject/api.h
myproject/main.cpp

main.cpp で:

#include "api.h"
#include "mylibrary/api.h"

#include <boost/regex.hpp>

コンパイル時:

g++ -I mylibrary/include

于 2010-03-05T11:37:10.953 に答える