2016-05-08 10 views
2

私が既にコンパイルしたa projectに対してsample binaryを作成しようとしています。メイク中に必要なヘッダーファイルをリンクする

コンパイルが、私は、プロジェクトのソースで不足しているヘッダファイルを参照することができ

$ make 
c++ -D_THREAD_SAFE -I/usr/local/Cellar/protobuf/2.6.1/include -L/usr/local/Cellar/protobuf/2.6.1/lib -lprotobuf-lite tileinfo.cpp ../../src/vector_tile.pb.cc -o tileinfo -lprotobuf-lite -lz 
tileinfo.cpp:7:10: fatal error: 'vector_tile_compression.hpp' file not found 
#include "vector_tile_compression.hpp" 
     ^
1 error generated. 
make: *** [tileinfo] Error 1 

で失敗します。私はそれを見つけることができるように、コンパイル時にそれを含めたい。私は単純にすべてのソースをコピーすると間違った&私はこのヘッダーファイルを指すことができるはずだと仮定します。 -Iフラグを試しましたが、どのようなパスを指定しても、このヘッダーファイルを見つけることができません。

だから私洞窟の中やヘッダファイルをコピー...

$ cp ../../src/vector_tile_compression.hpp . 
$ make 
c++ -D_THREAD_SAFE -I/usr/local/Cellar/protobuf/2.6.1/include -L/usr/local/Cellar/protobuf/2.6.1/lib -lprotobuf-lite tileinfo.cpp ../../src/vector_tile.pb.cc -o tileinfo -lprotobuf-lite -lz 
In file included from tileinfo.cpp:7: 
./vector_tile_compression.hpp:5:10: fatal error: 'vector_tile_config.hpp' file not found 
#include "vector_tile_config.hpp" 
     ^
1 error generated. 
make: *** [tileinfo] Error 1 

OK、それは今、新しいファイルの後だとそれだけでより多くを望むだろう。 (私は心配ですけれども、私は間違ってターンを取った)のは、例の中にプロジェクト全体のソースを移動してみましょう...

$ cp ../../src/* . 
$ make 
c++ -D_THREAD_SAFE -I/usr/local/Cellar/protobuf/2.6.1/include -L/usr/local/Cellar/protobuf/2.6.1/lib -lprotobuf-lite tileinfo.cpp ../../src/vector_tile.pb.cc -o tileinfo -lprotobuf-lite -lz 
In file included from tileinfo.cpp:7: 
In file included from ./vector_tile_compression.hpp:5: 
./vector_tile_config.hpp:10:10: fatal error: 'protozero/types.hpp' file not found 
#include <protozero/types.hpp> 
     ^
1 error generated. 
make: *** [tileinfo] Error 1 

まあ少し進歩のように見えています。それはprotozeroが欲しい。これはdepsというプロジェクトのサブフォルダに含まれています。さて、私はそれを含めるようにしています。

$ make -I ../../deps/protozero/include/ 
c++ -D_THREAD_SAFE -I/usr/local/Cellar/protobuf/2.6.1/include -L/usr/local/Cellar/protobuf/2.6.1/lib -lprotobuf-lite tileinfo.cpp ../../src/vector_tile.pb.cc -o tileinfo -lprotobuf-lite -lz 
In file included from tileinfo.cpp:7: 
In file included from ./vector_tile_compression.hpp:5: 
./vector_tile_config.hpp:10:10: fatal error: 'protozero/types.hpp' file not found 
#include <protozero/types.hpp> 
     ^
1 error generated. 
make: *** [tileinfo] Error 1 

繰り返しますが、私はパス上のいくつかのバリエーションを試してみましたが、この-Iフラグが、私はそれが私はそれがないと思う何をしないと思います。

私は必死で私は依存関係をコピーします。

$ cp -r ../../deps/protozero/include/protozero . 
$ make 
c++ -D_THREAD_SAFE -I/usr/local/Cellar/protobuf/2.6.1/include -L/usr/local/Cellar/protobuf/2.6.1/lib -lprotobuf-lite tileinfo.cpp ../../src/vector_tile.pb.cc -o tileinfo -lprotobuf-lite -lz 
In file included from tileinfo.cpp:7: 
In file included from ./vector_tile_compression.hpp:5: 
./vector_tile_config.hpp:10:10: error: 'protozero/types.hpp' file not found with <angled> include; use "quotes" instead 
#include <protozero/types.hpp> 
     ^~~~~~~~~~~~~~~~~~~~~ 
     "protozero/types.hpp" 

このメッセージは、ファイルをコピーするのではなく、ファイルにリンクするように指示しています。明らかに私は間違っている。代わりに私は何をしなければなりませんか?

答えて

1

あなたはほぼそこにいます。私はよりクリーンな方法でステップを要約します(たとえあなたがすでに何かをやったとしても)。

まず、依存関係をダウンロードする必要があります。 Looking at mapnik-vector-tile project Makefile我々は持っている:

PROTOZERO_REVISION=v1.3.0 git clone https://github.com/mapbox/protozero.git ./deps/protozero && cd ./deps/protozero && git checkout $(PROTOZERO_REVISION) 

プロジェクトのルートフォルダからこのコマンドを実行した後、あなたがprotozero内部でdepsフォルダを持っています。

最後に、あなたがこの新しいについてコンパイラに指示する必要があるが(あなたが提供the binary linkthe oneに似て、あなたのファイルの構造を使用することを想定)あなたMakefileCXXFLAGS

-I./deps/protozero/include 

を追加することにより、パスを含めます。

関連する問題