1

2つのソースフォルダー(mainとlib)を持つプロジェクトがあります。共有ライブラリと実行可能ファイルを生成します。現在、次のように構築されています。

  • 両方のフォルダからすべてのファイルを新しい一時フォルダにコピーします
  • lib_makefileを実行します
  • main_makefileを実行します
  • バイナリをコピーします
  • 一時フォルダを削除する

これは奇妙なやり方だと思ったので、-I../mainlib_makefileに追加して(またはその逆に)それぞれをインプレースでビルドしてみました。残念ながら、これは機能していないようです。

実例:foo.cpp(lib内)にはbar.h(main内)が含まれ、baz.h(lib内に戻る)が含まれます。

共有ライブラリをコンパイルしようとすると、main /にbar.hが正しく配置されますが、baz.hがと同じディレクトリにある場合でも、baz.hが見つからないと主張して「そのようなファイルまたはディレクトリはありません」と表示されます。 lib_makefile!

すべてのインクルードは#include"xxx.h"の形式です(つまり、includeステートメントに相対パスはありません)。

これを機能させる方法はありますか?明らかな何かが欠けているに違いないような気がします。

(nb:他の人がまだこれをコピー-すべて-方法で構築しているため、#includesを変更することはできません)

4

1 に答える 1

5

-I../libライブラリのmakefileにも(またはライブラリパスが何であれ)のようなものを追加する必要があります。

この理由は、プリプロセッサが、元のファイルが存在する場所からではなく、現在のファイルが存在するディレクトリに関連するインクルードファイルを検索するためです。

于 2012-08-28T08:52:48.783 に答える