web-dev-qa-db-ja.com

makefileにC / C ++ #definesを渡す

Eclipse IDEを使用してC/C++を開発しています。 Eclipseは、単に上書きされるため、編集したくないメイクファイルも生成します。

Hudson内で毎晩ビルドするために、そのメイクファイルを使用したいと思います。

IDEのプロジェクトファイルで作成された#definesをmakefileに渡すにはどうすればよいですか?(そして、Eclipseは生成されたmakefileにそれらを含めないのはなぜですか?)

私は実際に一度これを理解し、それを誤って上書きしました:-(しかし、少なくともそれができることは知っています...

コマンドラインからmakeを実行している場合は、

make CPPFLAGS=-DFOO

-DFOOをすべてのコンパイルに追加します。 makeマニュアルのCFLAGS、CXXFLAGS、LDFLAGSも参照してください。

29
Scott Wales

ヘッダーを含める小さなプログラムを作成し、メイクファイルフラグメントを書き込むことができます include in main makefile (GNU makeが必要です)。

これはかなり醜い解決策であり、かなりの量の手作業が必要です。よりエレガントなのは、プロジェクトファイルをparseして、makefileフラグメントを書き込むことです。

2
dmckee

GCCの場合は-D defineを使用します。

OPは、defineをmakeに渡し、それをGCCに渡したいと以下でコメントしました。

Makeはこれを許可しません。通常は、別のmakeルールを追加して定義を追加します。たとえば、「make release」と「make debug」です。 makefileの作成者は、2つのルールを作成し、makeファイルで定義を行います。 Eclipseがmakefileに定義を入れていない場合、Eclipseが壊れていると言えます。

1
Gregor Brandt

Autotoolsを使用している場合、別のオプションとして、「bin/debug」と「bin/release」の2つのディレクトリを作成します。

# Simple bootstrap script.

# Remove previously generated filed and call autoreconf.
# At the end configure 2 separate builds.
echo "Setting up Debug configuration: bin/debug"
../../configure CXXFLAGS="-g3 -O0 -DDEBUG=1"
echo "Setting up Release configuration: bin/release"
cd bin/release/
../../configure CXXFLAGS="-O2"

Eclipseをセットアップします。プロジェクトのプロパティを開き(Project-> Properties-> C/C++ Build-> Builder Settings)、Build Location-> Build Directoryを

${workspace_loc:/helloworld/bin/debug}

'helloworld'を、ワークスペースを基準にしたプロジェクトのディレクトリに置き換えます(または、絶対パス$ {/ abs/path/debug}を指定できます)。パスの最後にある "/ debug"を "release"に置き換えて、Release構成でも同じことを行います。

この方法はディスク領域の無駄のように見えますが、完全に個別のビルドを実現するための有効な代替手段です。

1
Plamen