web-dev-qa-db-ja.com

Eclipseの場合:すべてのC / C ++プロジェクトのインクルードパスとライブラリを追加する方法

すべてのC/C++プロジェクトにインクルードパスとライブラリを追加することは可能ですか?言い換えれば、どうすればそれらをグローバルにしたり、C/C++プロジェクトのビルド設定を別の設定にコピーしたりできますか?

20
Walidix

Eclipse Indigoの場合:インクルードパスとライブラリをグローバルに定義する可能性はありません。ただし、それらを1つのプロジェクトから別のプロジェクトにエクスポートおよびインポートできます。

Project> Properties> C/C++ General> Paths and Symbolsに移動し、次にExport Settings ...をクリックして、インクルードパスやシンボル定義をファイルに保存します。他のプロジェクトでは、Import Settings ...を使用できます。

13
parvus

はい、parvusで述べられているように、2つのステップでよりユーザーフレンドリーにできます。どちらも[プロジェクトプロパティ]-> [C/C++全般]-> [パスとシンボル]で行います。

  1. インクルードパスを既に構成している既存のプロジェクトの場合:新しいプロジェクトにコピーするインクルードパス([インクルード]タブ内)を強調表示し、[エクスポート]を選択します。これにより、各行に[Exp]タグが追加されます。
  2. 新しく作成されたプロジェクト:[参照]タブで、先ほど述べたプロジェクトのチェックボックスをオンにします。[含める]タブに戻ると、エクスポートしたすべてのパスがそこに表示されます。

ライブラリの参照も同じように機能します。

また、見てください:

9
Dominik

私はよくCPATH環境変数を使用して、すべてのプロジェクトにわたって異なるディレクトリーを含めます。これは、c/c ++-> build-> environmentの下にあります。各パスは必ず「:」文字で区切ってください(「;」セミコロンではありません)。

PATHを使用して静的ライブラリを含めることもできます。ただし、私にとっては、Linuxでのみ確実に機能します。 OSXではそれが台無しにする。

代わりに、これらのライブラリとヘッダーを環境のデフォルトの検索パスに追加することもできます。場所は/ usr/local/libが好きです。リンカーがデフォルトで検索する場所を確認します。

7
DiscoStu

ライブラリの場合、ソースプロジェクトで次のようにします。

プロジェクト->プロパティ-> c/c ++ Build-> c ++リンカー->ライブラリ

この後、ライブラリを選択し(Shift +マウス)、コピーします(Ctrl + C)

空のプロジェクトで:

プロジェクト->プロパティ-> c/c ++ Build-> c ++リンカー->ライブラリ

ctrl + v(貼り付け)

Eclipse junoで正常に動作します

5
krenon

Project Explorerに組み込まれているEclipseを使用して1つのプロジェクトをコピーするだけです。その後、ソースファイルの名前を変更するだけです。

3
Nenad Bulatovic

ずっと前に調べています。いくつかの投稿で、1つの方法について言及しました。[プロジェクト]> [プロパティ]> [C/C++全般]> [パスとシンボル]をクリックし、[設定のエクスポート]をクリックします。ただし、ヘッダーファイルを含める場合にのみ機能します。

ライブラリとライブラリパスを指定するために、私が知る限り、簡単な解決策は見つかりません。たとえば、現在ffmpegライブラリを使用しています。 「Makefile」を使用する場合、インクルードファイルとライブラリファイルは次のように表すことができます。

FFMPEG_LIBS = libavdevice
libavformat
libavfilter
libavcodec
libswresample
libswscale
libavutil
CFLAGS:= $(Shell pkg-config --cflags $(FFMPEG_LIBS))$(CFLAGS)LDLIBS:= $(Shell pkg-config --libs $(FFMPEG_LIBS))$(LDLIBS)

ここには多くのファイルがあります。それらをEclipse C++プロジェクトに1つずつ含めると、それは困難です。を使用して長い行を過ぎてライブラリファイルを含めることができるオプションがEclipseにない理由はわかりません。次のようなセパレータとして:

-lavdevice -lavfilter -lswresample -lswscale -lavformat -lavcodec -ldl -lasound -lSDL -lz -lrt -lavutil -lm

そのような方法はありますか、またはライブラリファイルを1つずつ入力する必要があるか、Makefileを使用する必要がありますか?

1
user1914692

半自動的に、次のPerlスクリプトを使用して実行できます。

#!/usr/bin/Perl

# pipe the (gcc) compile command into this script
# It emits listOptionValue lines to paste into .cproject
#
# To easily find the paste location, set the include path as usual to a string 
# that is easily recognizable in the .cproject, e.g. to "MARKER_INCLUDE_PATH".
#
# Make sure Eclipse is not running while you do these sorts of hacks and backup 
# your .cproject before.
# -----------------------------------------------------------------------------------------
# sample line: <listOptionValue builtIn="false" value="/usr/include/gdk-pixbuf-2.0"/>

while (<>) {
    @include_options = m#-I *(.*?) #g;
    print join ("\n", @include_options) . "\n";
    print join ('"/>' ."\n" . '                                 <listOptionValue builtIn="false" value="', @include_options);
    print '"/>' . "\n";
}
0
jif54

私は同じ問題に直面し、次のように解決しました:自動生成されたmakefileに次の行があることがわかりました。

-include ../makefile.init
 ...
-include ../makefile.defs
 ...
-include ../makefile.targets

読んだ後 Eclipseで生成されたmakeファイルをパラメーター化するにはどうすればよいですか プロジェクトの外部で変数を定義できることに気付きました。つまり、複数のプロジェクトで変数を共有できます。そのため、プロジェクトの外部にmakefile.defsファイルを追加し、その中でいくつかの変数を宣言します。

MY_INCLUDE = <path to include>...
MY_LIBS_PATH = <path to libs>...
MY_LIBS = -lmylib ... (the libs)

私のすべてのプロジェクトよりも「プロパティ-> c/c ++ビルド->ビルド変数」私は新しい変数を定義しました:

my_include = $(MY_INCLUDE)
my_libs_path = $(MYLIBS_PATH)
my_libs = $(MY_LIBS)

そして、プロジェクトでこれらの変数を使用することができます。プロパティ-> c/c ++ビルド->設定に移動し、コンパイラインクルードを選択して$(my_include)を追加します。リンカーに移動し、ライブラリを選択して、検索パス$(my_libs_path)に追加します。何らかの理由で、ライブラリ(-l)は定義された環境変数を取得できないため、リンカーを選択してそれをバイパスし、その他に移動してリンカーフラグ$(my_libs)に追加します。最後に、コマンドラインで順序を変更する必要があります(リンカーが実行されるとき)。ライブラリのリストは.oファイルの後に置く必要があります。これを行うには、リンカーとタブに移動すると、実行される最後のコマンドラインが表示されます。 「エキスパート設定コマンドラインパターン」では、$ {FLAGS}をコマンドラインの後ろに移動します(これにより、$(my_libs)文字列がコマンドラインの後ろに移動します)。そのすべて。それはたくさんですが、あなたは一度だけそれをする必要があります...それが誰かを助けることを願っています...

0
yehudahs