2012-02-18 4 views
3

3時間の研究の後、私は狂ってしまうつもりです。だから私は新しい目にそれを伝えるべきだと思います。Makefileはインクルード/ライブラリパスを使用していませんか?

CXXFLAGS  = -g -Wall 
OBJS   = main.o 
PROG   = test 
INCLUDES  = -I /usr/include/mysql -I /usr/local/include 
LIBS   = -L /usr/lib/mysql -l libmysqlclient.so.15.0.0 -L /usr/local/lib -l libmysqlpp.so.3.1.0 

all:   $(PROG) 

${PROG}:  $(OBJS) 
      $(CXX) $(INCLUDES) -o $(PROG) $(OBJS) $(LIBS) 

clean:;   $(RM) -f $(PROG) core *.o 

私はそれが明確には/ usr /含める/ mysqlの中に存在しない場合mysql_version.hが存在しないエラーが発生しますので、含めるパスと間違って何かが、あります。

チェック出力に含まのうち最初の部分は、それは私が私が間違っているMakefileの何かをフォーマットしてきたと思います

g++ -g -Wall -c -o main.o main.cpp 

(による余分なスペースの不足のためには、/ライブラリパスを含める)と言います。しかし、私は、Makefilesとg ++オプションに関する数十のマニュアルと記事を見てきました。進歩はありません。

これは簡単な修正であるはずです。どうか、助けてください(あなたは私の絶望を感じますか?)。

別のこととして、ライブラリを具体的に指定する必要がありますか?私はこの物をXCodeで動かしていましたが、コードをマイサーバに移行しようとしています... Makefileはすべての進歩を止めました。私はそれを学ぶべきだと思います。

+0

私のMacでは正常に動作します。それはタブを使用することに不満を募らせたが、スペースは特にそうではない。申し訳ありませんより多くの助けができません:( – akhisp

答えて

10

メイクファイルでは、コンパイル段階ではなくリンク段階にインクルードディレクティブを追加しました。

ライン

${PROG}:  $(OBJS) 
      $(CXX) $(INCLUDES) -o $(PROG) $(OBJS) $(LIBS) 

言って、あなたの他の引数と一緒に含まれたフォルダを(渡す$ {CXX}でコンパイラを呼び出すことにより、$ {OBJS}内のオブジェクト・ファイルから$ {PROG}でプログラムを作成します)。代わりに、あなたの変数セクションのために、次の操作を行います。

INCLUDES  = -I /usr/include/mysql -I /usr/local/include 
CXXFLAGS  = -g -Wall ${INCLUDES} 
OBJS   = main.o 
PROG   = test 
LIBS   = -L /usr/lib/mysql -l libmysqlclient.so.15.0.0 -L /usr/local/lib -l libmysqlpp.so.3.1.0 

(コンパイル段階のために使用されている)あなたのCXXFLAGSが今ピックアップあなたは、ディレクティブを含める必要があります。この道を。

+0

私はそれを試してみましたが、私はその部分を見逃しましたリンクステージを見ました良いスポット – akhisp

+0

私は '-I'が一般にpre-コンパイラのステップであるので、 'CPPFLAGS'にはうまく適合しますが、' CXXFLAGS'もうまくいきます。 –

関連する問題