C++ cmake如何避免系统库

C++ cmake如何避免系统库,c++,cmake,C++,Cmake,我想在我的项目中使用Qt4的某个版本。我正在使用debian,并且已经安装了一个较旧版本的Qt4。当然,当我在CMakeLists文件中使用find_package命令时,会找到系统库,因为cmake使用了文件/usr/share/cmake-2.8/Modules/FindQt4.cmake 到目前为止,我在链接较新的Qt4时所做的是使用ccmake手动编辑路径。问题是我不允许在系统目录中安装较新的Qt4版本。有没有更简单的方法告诉cmake不要使用系统库,只使用另一个版本。当然,我可以创建我

我想在我的项目中使用Qt4的某个版本。我正在使用debian,并且已经安装了一个较旧版本的Qt4。当然,当我在CMakeLists文件中使用find_package命令时,会找到系统库,因为cmake使用了文件/usr/share/cmake-2.8/Modules/FindQt4.cmake

到目前为止,我在链接较新的Qt4时所做的是使用ccmake手动编辑路径。问题是我不允许在系统目录中安装较新的Qt4版本。有没有更简单的方法告诉cmake不要使用系统库,只使用另一个版本。当然,我可以创建我自己的模块,并给find_package命令我自己模块的路径,但我认为这很烦人,必须有一个更简单的解决方案


我还寻找了一些FindQt4.cmake模块使用的环境变量,但是没有那么,有没有一种通用的解决方案可以避免使用系统库并使用安装在非系统目录中的库,而不必做一些肮脏的事情呢?

在Linux上使用不同版本库的唯一真正方法是使用静态链接。如果您需要能够同时使用同一库的不同版本,则需要使用支持该范例的操作系统。Solaris(及其衍生产品)在这方面尤其出色(使用
-L
编译以指向要编译的库,并使用
-R
指示运行时指向该库的路径)。我相信BSD是一样的


除此之外,您还需要创建一个
chroot
(穷人的BSD监狱)来部署您的应用程序。您将向chroot安装所有依赖项的副本(使用
ldd
查找它们)和您希望使用的Qt4副本。

一般不了解系统库。对于Qt,您将搜索路径设置为qmake,Qt将执行其余操作。Qmake路径是通过QT_Qmake_可执行文件设置的,我使用QT commercial,这就是我在Cmake中设置路径的方式


set(QT_QMAKE_可执行文件$ENV{HOME}/qtcommerialsdk/Desktop/483/gcc-64/bin/QMAKE)

如果我没记错的话,FindQt首先在$PATH中搜索“QMAKE”,并为找到的QMAKE确定QT安装。也许将您自己的Qt安装添加到$PATH会有所帮助?