我正在尝试使用 qmake 在我的系统中编译一个项目。项目的一些依赖项没有安装,但驻留在我的主目录中,或多或少像这样: libs 文件:/home/myusername/local/lib
和我的包含目录/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
}
并且生成的 makefile 将生成如下命令:
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 在那里?
我在 Windows 上使用 MinGW g++ 没有问题。