2016-05-15 5 views
1

は、以前私がこのようなものだったディレクティブpictDBMを持っていました。複数行のbashスクリプトと連結

その後、私はコマンドラインから与えられたオプションの引数を追加できるようにしたいと考えました。このオプションは、pictDBMサブパートで実行するgccコマンドラインに入ります。

私は自分のコードで宣言しているOPTS=""変数を使用して問題に賛成しました(どのディレクティブの前にもmakefileの先頭にあります)。私の目的は、このようにmakeを呼び出すことです: make all OPT='-g'

は、その後、私は私の解決策の変数 base=gcc $(CFLAGS) -o [email protected] $^ $(LDLIBS)

パートは私がpictDBMで実行${base}gccコマンドに${OPT}変数の私のオプションを含めるかどうかのelse構造を使用することを宣言しました。

私はelse構文あれば、私のマルチラインを構築する助けたこと、this topicを赤:

pictDBM : db_list.o db_delete.o db_utils.o error.o pictDBM.o 
    db_create.o dedup.o image_content.o pictDBM_tools.o db_read.o 
     if [ ! -z "$$OPT" ]; \ 
     then \ 
       echo "$$base $$OPT" ; \ #for debugging purposes 
       eval "$$base $$OPT" ; \ 
     else \ 
       eval "$$base" ; \ 
     fi ; 

を私は単にmake allすべてを実行する場合は、makeでOKのようだ、と出力プログラムがうまく動作します。

が、私はmake all OPTS='-g'を実行すると、私は次の出力を得る:

-g 
/bin/sh: 1: eval: -g: not found 
makefile:16: recipe for target 'pictDBM' failed 
make: *** [pictDBM] Error 127 

あなたは、私はこの問題を解決する方法を、唯一-gエコープリントを見ることができますか?

make all CFLAGS=-g 

とメイクファイルで変数をオーバーライドします:

override CFLAGS += # Your local options 

all: pictDBM 

pictDBM: db_list.o db_delete.o db_utils.o error.o pictDBM.o \ 
      db_create.o dedup.o image_content.o pictDBM_tools.o db_read.o 
    gcc $(CFLAGS) -o [email protected] $^ $(LDLIBS) 

CFLAGSは一種の奇数である

答えて

2

あなたは、コマンドラインで直接CFLAGSを指定して、条件付きまたはevalを必要としませんここでは、リンク時にコンパイルフラグを渡すべきではありません。

リンクオプションはLDFLAGSで指定できます。 pictDBMpictDBM.oを前提としており、既にLDLIBSを正しく使用しているため、makeの暗黙のリンクルールに依存することができ、レシピは不要です。

override LDFLAGS += # Your local options 

pictDBM: db_list.o db_delete.o db_utils.o error.o pictDBM.o \ 
      db_create.o dedup.o image_content.o pictDBM_tools.o db_read.o 

あなたのコメントを再度、あなたはそれ以外の場合は動作しません、変数の非常に最初の定義にoverrideを指定する必要があります。

override CFLAGS += $(shell pkg-config vips --cflags) -std=c99 -Wall 
override LDLIBS += $(shell pkg-config vips --libs) -lm -lssl -lcrypto 

pictDBM: db_list.o db_delete.o db_utils.o error.o pictDBM.o db_create.o dedup.o image_content.o pictDBM_tools.o db_read.o 
+0

私はあなたが行うことをお勧め何をやりました私のメイクファイルには、次のようになります。 'CFLAGS + = -std = c99を-Wall'
' CFLAGS + = $$(PKG-config設定のVIP --cflags) '
' LDLIBS + = $$(PKG-config設定をvips --libs)-lm -lssl -lcrypto'
'オーバーライドCFLAGS + = '
'オーバーライドLDFLAGS + ='
'全:pictDBM'
' pictDBM:db_list.o db_delete.o db_utils.o error.o pictDBM.o db_create.o'
'DEDUP .oのimage_content.o pictDBM_tools.o db_read.o'
が、私は 'すべてのCFLAGS = -g'
作るんときに私が取得:ファイルで – Simonlbc

+0

' ccの-g -c -o pictDBM.o pictDBM.c pictDB.h:32:0、 pictDBM.c:11: /usr/local/include/vips/vips.h:85:18:致命的なエラー:glib.h:そのようなファイルまたはディレクトリがありません コンパイルが終了しました。 :ターゲット 'pictDBM.o'のレシピが失敗しました make:*** [pictDBM.o]エラー1' 何が欠けていますか? – Simonlbc

+0

申し訳ありませんが、フォーマットはひどいです。私は改行を置くために最大限努力しました。しかし、試行錯誤の結果、このように見えてしまった:( – Simonlbc

関連する問題