qmake を使用して、自分のシステムでプロジェクトをコンパイルしようとしています。プロジェクトのいくつかの依存関係はインストールされていませんが、多かれ少なかれ次のように私のホームディレクトリに存在します: libs files: /home/myusername/local/lib
and my includes directory /home/myusername/local/include
. インクルード ディレクトリ内にはqjson
、ライブラリから必要なヘッダーを含むフォルダーがあります。lib フォルダーにファイルがありますlibqjson.so libqjson.so.0 libqjson.so.0.7.1
。
私のqmakeプロジェクトファイルは次のようになります。
linux-g++ {
INCLUDEPATH += /home/myusername/local/include/
LIBS += -L/home/myusername/local/lib/ -lqjson
}
生成されたメイクファイルは、次のようなコマンドを生成します。
g++ -c -pipe -g -Wall -W -D_REENTRANT -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB \
-DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I../qbuzz \
-I/usr/include/qt4/QtCore -I/usr/include/qt4/QtNetwork -I/usr/include/qt4/QtGui \
-I/usr/include/qt4 -I/home/myusername/local/include/ -I. -I. -I../myproject -I. \
-o qbuzz-result.o ../myproject/myfile.cc
-I
私のインクルードディレクトリがgccのオプションにあることは明らかです。myfile.cc
次のようなインクルードが含まれています。
#include <qjson/parser.h>
ただし、make を実行すると、次のエラーが表示されます。
../myproject/myfile.cc:2:26: fatal error: qjson/parser.h: No such file or directory
compilation terminated.
ここで、環境変数を変更しCPLUS_INCLUDE_PATH
てローカル インクルード ファイルを追加すると、問題はありませんが、リンカー ステージでエラーが発生しました。
/usr/bin/ld: cannot find -lqjson
collect2: ld returned 1 exit status
リンカーコマンドは次のとおりでしたが:
g++ -omyprogram main.o mainwindow.o myfile.o moc_mainwindow.o -L/usr/lib \
-L/home/myusername/local/lib/ -lqjson -lQtGui -lQtNetwork -lQtCore -lpthread
環境変数の変更も回避できますLIBRARY_PATH
。ただし、できるだけ少ない環境変数を変更することに依存するソリューションを探しています。結局のところ、オプション -L と -I があるのはなぜですか?
MinGW g++ を使用して Windows で問題なく動作します。